WAon#17 珂朵莉树求助
  • 板块CF817F MEX Queries
  • 楼主_7Mr
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/28 16:47
  • 上次更新2023/12/28 16:49:54
查看原帖
WAon#17 珂朵莉树求助
602632
_7Mr楼主2023/12/28 16:47

#17

测试点输入

3
1 1 1000000000000000000
3 1 999999999999999999
2 1000000000000000000 1000000000000000000

测试点输出

1000000000000000001
1
1

我的输出

1
1
#include<bits/stdc++.h>
#define int long long
#define double long double
#define INF INT_MAX
using namespace std;
int n;
int l,r;
struct node {
	int l,r;
	mutable int v;
	node(int L,int R=0,int V=0) : l(L),r(R),v(V) {}
	bool operator < (const node &x) const {
		return l<x.l;
	}
};
set<node> ODT;
set<node>::iterator spilit(int pos) {
	set<node>::iterator it=ODT.lower_bound(node(pos,-1,0));
	if(it!=ODT.end() && it->l==pos) return it;
	it--;
	if(it->r<pos) return ODT.end();
	int V=it->v,L=it->l,R=it->r;
	ODT.erase(it);
	ODT.insert(node(L,pos-1,V));
	return ODT.insert(node(pos,R,V)).first;
}
void bulldoze(int l,int r,int x) {
	set<node>::iterator itr=spilit(r+1),itl=spilit(l);
	ODT.erase(itl,itr);
	ODT.insert(node(l,r,x));
}
void Reverse(int l,int r){
	set<node>::iterator itr=spilit(r+1),itl=spilit(l);
	for(;itl!=itr;itl++) itl->v=!itl->v;
}
void sum(){
	for(set<node>::iterator it=ODT.begin();it!=ODT.end();it++){
		if(!it->v){
        	cout<<it->l<<endl;
			return;
    	}
	}
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin>>n;
	ODT.insert(node(1,1e18+5,0));
	while(n--){
		int op,l,r;
		cin>>op>>l>>r;
		if(op==1) bulldoze(l,r,1);
		if(op==2) bulldoze(l,r,0);
		if(op==3) Reverse(l,r);
		sum();
	}
	return 0;
}
2023/12/28 16:47
加载中...