rt,感觉思路理论上没错,可能有特殊情况没考虑到。
#include<bits/stdc++.h>
#define For(i,a,b) for(register int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(register int i=(a);i>=(b);--i)
using namespace std;
int n;
#define mp make_pair
typedef pair<int,int> P;
set<P> st;
int delete_segments(int L,int R)
{
int cnt=0;
st.insert(mp(L,R));
set<P>::iterator it=st.find(mp(L,R));
set<P>::iterator pre=it; //往前删
if(it!=st.begin()&&(*(--pre)).second>=(*it).first)
st.erase(pre),cnt++;
it=st.find(mp(L,R));
set<P>::iterator nxt=it; //往后删
nxt++;
while(nxt!=st.end()&&(*nxt).first<=(*it).second)
{
st.erase(nxt),cnt++;
nxt=it=st.find(mp(L,R));
nxt++;
}
return cnt;
}
int main()
{
cin>>n;
while(n--)
{
char op; cin>>op;
if(op=='A')
{
int L,R; cin>>L>>R;
cout<<delete_segments(L,R)<<endl;
}
else cout<<st.size()<<endl;
}
return 0;
}
评测记录