补题 div3:
https://codeforces.com/contest/1883
补知识点
1 mutiset:
动态维护 升序排列
【D题】:
迭代器相关操作 返回的是迭代器 而不是该位置的元素
操作 描述
c.begin() 返回一个 bidirectional iterator 指向第一元素
c.end() 返回一个 bidirectional iterator 指向最末元素的下一位置
c.end() :不是最后一个 最后一个的下一个
c.cbegin() 返回一个 const bidirectional iterator 指向第一元素(始自C++11)
c.cend() 返回一个 const bidirectional iterator 指向最末元素的下一位置(始自C++11)
c.rbegin() 返回一个反向的 (reverse) iterator 指向反向迭代的第一元素 //最后一个
c.rend() 返回一个反向的 (reverse) iterator 指向反向迭代的最末元素的下一位置
c.crbegin() 返回一个 const reverse iterator 指向反向迭代的第一元素(始自C++11)
c.crend() 返回一个 const reverse iterator 指向反向迭代的最未元素的下一位置(始自C++11)
例:
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
int l,r,n;
cin>>n;
char c;
multiset<int>sts,ends;
while(n--)
{
cin>>c>>l>>r;
if(c=='+')sts.insert(l),ends.insert(r);
else sts.erase(sts.find(l)),ends.erase(ends.find(r));
//若sts.erase(l)则删除了所有的l 若sts.erase(sts,find(l))则只删除了l所对应的其中一个迭代器
if(ends.size()&&*ends.begin()<*sts.rbegin())cout<<"YES\n";
//ends.begin()只是一个迭代器 若想表达其的值:*ends.begin();
else cout<<"NO\n";
}
}
signed main() //由于上面用long long 取代代码中所有的 int 故用signed来代替 int
{
solve();
return 0;
}