写完了后看了下题解,不认为自己的实现哪里有问题,不过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;
}