#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<ctime> #include<cmath> #include<algorithm> #define FILE "interval" #define cmax(a,b) a=max(a,b) #define cmin(a,b) a=min(a,b) using namespace std; const int MAXN=524287,D=50; int tr[MAXN<<2]; char opt[5]; void pushdown(int p){ if(tr[p]==1||tr[p]==-1){ tr[p*2]=tr[p*2+1]=tr[p]; }else if(tr[p]==2){ tr[p*2]=-tr[p*2]; tr[p*2+1]=-tr[p*2+1]; } tr[p]=-2; } void insert(int p,int l,int r,int x,int y,int v){ if(x>r||y<l) return; if(x<=l&&y>=r) {tr[p]=v; return;} pushdown(p); int mid=(l+r)>>1; insert(p<<1,l,mid,x,y,v); insert(p<<1|1,mid+1,r,x,y,v); } void updata(int p,int l,int r,int x,int y){ if(x>r||y<l) return; if(x<=l&&y>=r) {tr[p]=-tr[p]; return;} pushdown(p); int mid=(l+r)>>1; updata(p<<1,l,mid,x,y); updata(p<<1|1,mid+1,r,x,y); } void clear(int p,int l,int r){ if(l>=r) return; pushdown(p); int mid=(l+r)>>1; clear(p<<1,l,mid); clear(p<<1|1,mid+1,r); } int main(){ freopen(FILE".in","r",stdin); freopen(FILE".out","w",stdout); memset(tr,-1,sizeof(tr)); while(scanf("%s",opt+1)!=EOF){ char ch=getchar(); while(ch!='('&&ch!='[') ch=getchar(); int flag=(ch=='('),a,b; scanf("%d,%d",&a,&b); a=a*2+flag; ch=getchar(); while(ch!=')'&&ch!=']') ch=getchar(); flag=(ch==')'); b=b*2-flag; if(opt[1]=='U') insert(1,0,MAXN,a,b,1); else if(opt[1]=='I'){ if(a) insert(1,0,MAXN,0,a-1,-1); insert(1,0,MAXN,b+1,MAXN,-1); } else if(opt[1]=='D') insert(1,0,MAXN,a,b,-1); else if(opt[1]=='C'){ if(a) insert(1,0,MAXN,0,a-1,-1); insert(1,0,MAXN,b+1,MAXN,-1); updata(1,0,MAXN,a,b); } else updata(1,0,MAXN,a,b); } clear(1,0,MAXN); tr[MAXN]=-1; int flag=1; for(int i=0;i<=MAXN;++i){ if(tr[i+MAXN+1]==1&&tr[i+MAXN]==-1){ if(flag){ printf(i&1?"(":"[");printf("%d,",i>>1); flag=0; continue; } printf(" ");printf(i&1?"(":"[");printf("%d,",i>>1); } if(tr[i+MAXN+1]==-1&&tr[i+MAXN]==1){ printf("%d",i>>1);printf(i&1?"]":")"); } } if(flag) puts("empty set"); return 0; }
|