STL set 玄学20分求助o(╥﹏╥)o
查看原帖
STL set 玄学20分求助o(╥﹏╥)o
219866
Blunt_Feeling楼主2021/7/1 15:15

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;
}

评测记录

2021/7/1 15:15
加载中...