CF1883D
题面
题意:每次有两种操作,一种是加入一条线段,一种是去掉一条线段,保证操作均合法。
思路
由于删除线段时一定保证该线段存在,所以我们可以分别开两个 multiset,分别维护线段的左端点最大值和右端点最小值,然后就可以判断了。
注意判断集合为空时答案为
代码
#include <bits/stdc++.h>
using namespace std;
multiset<int> ml, mr;
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
char op[2];
scanf("%s", op);
int l, r;
scanf("%d%d", &l, &r);
if(*op == '-')
{
ml.erase(ml.find(l));
mr.erase(mr.find(r));
}
else
{
ml.insert(l);
mr.insert(r);
}
if(!ml.size())
{
cout << "NO" << endl;
}
else if(*(prev(ml.end())) > *mr.begin())
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
}
return 0;
}