2017.5.12 校门外的区间 思考记录

来源:互联网 发布:爱的算法 mobi 编辑:程序博客网 时间:2024/06/05 15:03

        这题很裸,只要维护单点1,0就行了、、

        不同运算表示  :

            u  : 全1

            d  : 全0

             i  : 以外全0

            c  : 取反,以外取0

            s  :取反



线段树标记记得下传时当前点标记清零 ,然后就没了

     


   犯的错误:   1、 标记忘清零、

                          2、 小数时的括号 

                              3、特判!!!0!!! 0!!!!0 !!!!



码:

#include<iostream>#include<cstdio>using namespace std;#define zuo l,mid,o<<1#define you mid+1,r,o<<1|1#define N 131075 int quan1[N<<2],quan0[N<<2],rev[N<<2],a,b,op,la,lb,i,lin; char ch,zkh,ykh,douhao;bool yes,lianxu,jieshu,yici=1;void down(int o){if(quan0[o]==1)   {   quan0[o<<1]=1;     quan1[o<<1]=0;  rev[o<<1]=0;        quan0[o<<1|1]=1;     quan1[o<<1|1]=0;  rev[o<<1|1]=0;     }if(quan1[o]==1)   {   quan0[o<<1]=0;     quan1[o<<1]=1;  rev[o<<1]=0;        quan0[o<<1|1]=0;     quan1[o<<1|1]=1;  rev[o<<1|1]=0;     }if(rev[o]==1){ rev[o<<1]^=1; rev[o<<1|1]^=1;  }rev[o]=0;quan0[o]=0;quan1[o]=0;}void gai(int l,int r,int o){if(l!=r)down(o);if(a<=l&&r<=b){if(op==1){rev[o]=0;quan1[o]=1;quan0[o]=0;}if(op==2){rev[o]=0;quan1[o]=0;quan0[o]=1;}if(op==3){rev[o]^=1;}if(l!=r)down(o);return;}int mid=(l+r)>>1;if(a<=mid)gai(zuo);if(b>=mid+1)gai(you);}void zhao(int l,int r,int o) {if(l!=r)down(o);if(l==r){ lin=0;if(quan0[o])lin=0;if(quan1[o])lin=1;if(rev[o])lin^=1;       return ;   } int mid=(l+r)>>1;if(a<=mid)zhao(zuo);if(a>=mid+1)zhao(you);}int main(){    while(1){if(scanf("%c",&ch)==EOF)break;while((ch==' '||ch=='\n'||ch=='\r'))if(scanf("%c",&ch)==EOF){jieshu=1;break;}if(jieshu)break;scanf("%c",&zkh);scanf("%c",&zkh);scanf("%d",&a);scanf("%c",&douhao);scanf("%d",&b);scanf("%c",&ykh);a*=2;b*=2;if(zkh=='(')a++;if(ykh==')')b--;    if(ch=='U'){            op=1;            gai(1,N,1);}if(ch=='I'){op=2;la=a;lb=b;a=1;b=la-1;if(b>=a)gai(1,N,1);a=lb+1;b=N;if(b>=a)gai(1,N,1);}if(ch=='D'){op=2;if(b>=a)gai(1,N,1);}if(ch=='C'){op=3;gai(1,N,1);op=2;la=a;lb=b;a=1;b=la-1;if(b>=a)gai(1,N,1);a=lb+1;b=N;if(b>=a)gai(1,N,1);}if(ch=='S'){op=3;if(b>=a)gai(1,N,1);}}for(i=0;i<=131071;i++){a=i;lin=0;zhao(1,N,1);if(lin==1){yes=1;if(lianxu==1){continue;}if(lianxu==0){lianxu=1;if(a%2==1){if(!yici)printf(" (%d,",a/2);  else {yici=0;printf("(%d,",a/2);  }}else if(!yici)printf(" [%d,",a/2);  else {yici=0;printf("[%d,",a/2);  }}    }else    {    if(lianxu==0){continue;}if(lianxu==1){lianxu=0;if(a%2==1){printf("%d]",a/2);}else  printf("%d)",a/2);}}}if(yes==0){cout<<"empty set";}}


0 0