80分求调
查看原帖
80分求调
1473449
cncnk205634848楼主2024/12/23 22:35

用的珂朵莉树,样例1RE,样例2WA,AC关注

#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
	int l,r;
	mutable int v;
	bool operator<(const node&d) const{
		return l<d.l;
	}
};
node d;
set<node> s;
set<node>::iterator it;
void split(int k){
	set<node>::iterator it1;
	for(it1=s.begin();it1!=s.end();it1++){
		if((*it1).l<=k&&(*it1).r>=k){
			break;
		}
	}
	int ll=(*it1).l;
	int rr=(*it1).r;
	int vv=(*it1).v;
	s.erase(it1);
	d.l=ll;
	d.r=k;
	d.v=vv;
	s.insert(d);
	d.l=k+1;
	d.r=rr;
	s.insert(d);
}
void tp(const int&x,const int&y){
	split(x-1);
	split(y-1);
	set<node>::iterator itl;
	set<node>::iterator itr;
	for(it=s.begin();it!=s.end();it++){
		if((*it).l==x){
			itl=it;
		}
		else if((*it).l==y){
			itr=it;
		}
	}
	s.erase(itl,itr);
	d.l=x;
	d.r=y;
	d.v=0;
	s.insert(d);
}
int main(){
	int cnt=0;
	cin>>n>>m;
	d.l=1;
	d.r=n;
	d.v=1;
	s.insert(d);
	for(int i=1;i<=m;i++){
		int l,r;
		cin>>l>>r;
		tp(l,r);
	}
	set<node>::iterator pq;
	for((pq)=s.begin();(pq)!=s.end();pq++){
		if((*pq).v==1){
			cnt+=((*pq).r-(*pq).l+1);
		}
	}
	cout<<(cnt);
	return 0;
} 
2024/12/23 22:35
加载中...