odt求助
查看原帖
odt求助
214728
剑雪清寒楼主2022/9/29 19:50

写完了后看了下题解,不认为自己的实现哪里有问题,不过WA#1 )))

#include <bits/stdc++.h>
#define int long long
using namespace std;
inline long long read() {
	long long x;bool f;char ch;
	for(f=0;!isdigit(ch=getchar());f=ch=='-');
	for(x=ch-48;isdigit(ch=getchar());x=x*10+ch-48);
	return f?-x:x;
}
inline void print(long long x,char las) {
	if(!x) {
		putchar(48),putchar(las);
		return ;
	}
	if(x<0) putchar('-'),x=-x;
	int ls[20],k=0;
	while(x) ls[++k]=x%10,x/=10;
	while(k) putchar(ls[k--]+48);
	putchar(las);
	return ;
}
struct Node_t {
	int l,r;
	mutable int v;
	inline Node_t(const int&ll,const int&rr,const int&vv) : l(ll),r(rr),v(vv) {}
	inline bool operator<(const Node_t&ls) const {
		return l<ls.l;
	}
};
int n=read();
set<Node_t>chtholly;
inline auto split(int x) {
	if(x>1e18+1) return chtholly.end();
	auto it=--chtholly.upper_bound(Node_t(x,0,0));
	if(it->l==x) return it;
	int l=it->l,r=it->r,v=it->v;
	chtholly.erase(it);
	chtholly.insert(Node_t(l,x-1,v));
	return chtholly.insert(Node_t(x,r,v)).first;
}
inline void assign(int l,int r,int v) {
	auto itr=split(r+1),itl=split(l);
	chtholly.erase(itl,itr);
	chtholly.insert(Node_t(l,r,v));
}
inline void flip(int l,int r) {
	auto itr=split(r+1),itl=split(l);
	for(;itl!=itr;itl++) itl->v^=1;
	return ;
}
signed main() {
	chtholly.insert(Node_t(1,1e18+1,0));
	while(n--) {
		int opt=read(),l=read(),r=read();
		if(opt==1) {
			assign(l,r,1);
			auto it=chtholly.lower_bound(Node_t(l,0,0));
			auto k=it;
			while(k->v==it->v) {
				l=k->l;if(k->l==1) break;
				k--;
			}k=it;
			while(k->v==it->v) {
				r=k->r;if(k->r==1e18+1) break;
				k++;
			}
			assign(l,r,it->v);
		}else if(opt==2) {
			assign(l,r,0);
			auto it=chtholly.lower_bound(Node_t(l,0,0));
			auto k=it;
			while(k->v==it->v) {
				l=k->l;if(k->l==1) break;
				k--;
			}k=it;
			while(k->v==it->v) {
				r=k->r;if(k->r==1e18+1) break;
				k++;
			}
			assign(l,r,0);
		}else flip(l,r);
		for(register auto it=chtholly.begin();it!=chtholly.end();it++) if(!it->v) {
			print(it->l,'\n');break;
		}
	}
	return 0;
}
2022/9/29 19:50
加载中...