zoukankan      html  css  js  c++  java
  • POJ 3225 Help with Intervals

    U:把区间[l,r]覆盖成1
    I:把[0,l-1][r+1,∞]覆盖成0
    D:把区间[l,r]覆盖成0
    C:把[0,l-1][r+1,∞]覆盖成0 , 且[l,r]区间0/1互换(即异或)
    S:[l,r]区间0/1互换

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<vector>
    #include <iostream>
    #define L(x) (x<<1)
    #define R(x) (x<<1|1)
    #define debug(x) printf(#x"= %d
    ",x);
    #define N 140000
    using namespace std;
    int Val[N*4],Xor[N*4];
    bool mark[N];
    const int maxn =(65540<<1);
    void build(int l,int r,int i)
    {
        Val[i]=-1;
        Xor[i]=0;
        if(l!=r)
        {
            int mid=(l+r)>>1;
            build(l,mid,L(i));
            build(mid+1,r,R(i));
        }
    }
    void pushdown(int i)
    {
        if(Val[i]!=-1)
        {
            Xor[L(i)]=Xor[R(i)]=0;
            Val[L(i)]=Val[R(i)]=Val[i];
            Val[i]=-1;
        }
        if(Xor[i])
        {
            Xor[L(i)]^=1;
            Xor[R(i)]^=1;
            Xor[i]=0;
        }
    }
    void update(int l,int r,int pl,int pr,int type,int va,int i)
    {
        if(l>=pl&&r<=pr)
        {
            if(type==1){Xor[i]=0;Val[i]=va;return;}
            else {
                Xor[i]^=1;
                return;
            }
        }
        pushdown(i);
        int mid=(l+r)>>1;
        if(pl<=mid)update(l,mid,pl,pr,type,va,L(i));
        if(pr>mid)update(mid+1,r,pl,pr,type,va,R(i));
    }
    void query(int l,int r,int i)
    {
        if(l==r)
        {
            if(Val[i]==-1)Val[i]=0;
            Val[i]^=Xor[i];
            if(Val[i])
                mark[l]=true;
            return ;
        }
        pushdown(i);
        int mid=(l+r)>>1;
        query(l,mid,L(i));
        query(mid+1,r,R(i));
    }
    void solve(int l,int r,int pl,int pr,char type)
    {
        if(type=='U')update(l,r,pl,pr,1,1,1);
        else if(type=='I'){
            if(pl-1>=0)
                update(l,r,0,pl-1,1,0,1);
            update(l,r,pr+1,maxn,1,0,1);
        }
        else if(type=='D'){
            update(l,r,pl,pr,1,0,1);
        }
        else if(type=='C'){
            if(pl-1>=0)
                update(l,r,0,pl-1,1,0,1);
            update(l,r,pr+1,maxn,1,0,1);
            update(l,r,pl,pr,2,1,1);
        }
        else
        {
            update(l,r,pl,pr,2,1,1);
        }
    
    }
    
    int main() {
        char a,b,c,d;
        int l,r;
        build(0,maxn,1);
        while(scanf(" %c %c %d %c %d %c",&a,&b,&l,&c,&r,&d)!=EOF)
        {
            l<<=1;
            r<<=1;
            if(b=='(')l++;
            if(d==')')r--;
            if(l>r)
            {
                if(a=='I'||a=='C')
                {
                    Val[1]=Xor[1]=0;
                }
            }
            else
                solve(0,maxn,l,r,a);
        }
        memset(mark,0,sizeof(mark));
        query(0,maxn,1);
        int st,ed;
        st=ed=-1;
        int first=1;
        for(int i=0;i<=maxn;++i)
        {
            if(mark[i]){
                if(st==-1)st=i;
                ed=i;
            }
            else if(st!=-1)
            {
                if(!first)
                    printf(" ");
                if(st&1)printf("(");
                else printf("[");
                printf("%d,%d",(st>>1),((ed+1)>>1));
                if(ed&1)printf(")");
                else printf("]");
                st=-1;
                first=0;
            }
        }
        if(first)printf("empty set");
        puts("");
        return 0;
    }
  • 相关阅读:
    Android studio 报错 installation failed with message failed to finalize session:INSTALL_FAILED_INVALID_APK 解决方法
    Python 爬虫入门实例(爬取小米应用商店的top应用apk)
    解决jenkins控制台中文乱码问题
    四.Jenkins的授权和访问控制
    三.jenkins 在windows上配置master 和 agent(slave)
    Jenkins 默认没有Launch agent via Java Web Start,该如何配置
    二.jenkins构建自动化任务
    一.Jenkins的windows安装
    maven仓库地址配置
    jvm linux 时区设置
  • 原文地址:https://www.cnblogs.com/L-Ecry/p/3874746.html
Copyright © 2011-2022 走看看