Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:RE刷版了,求数据啊。。。给的都没问题啊。。。0也没问题啊

Posted by watashiwamajia at 2012-05-10 15:30:15 on Problem 3225
In Reply To:RE刷版了,求数据啊。。。给的都没问题啊。。。0也没问题啊 Posted by:watashiwamajia at 2012-05-05 15:59:36
> 求数据
#include<cstdio>
#include<cstring>
#define M 132000
int ll=-10,rr=-10,jud=1,jj=0;
struct Node{
    int l,r;
    bool pure,val;
}n[4*M];
void build(int l,int r,int th){
    n[th].l=l;
    n[th].r=r;
    n[th].val=0;
    n[th].pure=1;
    if(l==r) return;
    int m=(l+r)>>1;
    build(l,m,th<<1);
    build(m+1,r,th<<1|1);
}
void update(int l,int r,int th,int val){
    if(l==n[th].l&&r==n[th].r){
        n[th].val=val;
        n[th].pure=1;
        return;
    }
    if(n[th].pure) {
        n[th<<1].val=n[th<<1|1].val=n[th].val;
        n[th<<1].pure=n[th<<1|1].pure=1;
    }
    n[th].pure=0;
    int m=(n[th].l+n[th].r)>>1;
    if(m>=r) update(l,r,th<<1,val);
    else if(l>m) update(l,r,th<<1|1,val);
    else {
        update(l,m,th<<1,val);
        update(m+1,r,th<<1|1,val);
    }
    if(n[th<<1].pure&&n[th<<1|1].pure&&n[th<<1].val==n[th<<1|1].val) {
        n[th].val=n[th<<1].val;
        n[th].pure=1;
    }
}
void change(int l,int r,int th){
    if(n[th].pure) {
        if(l==n[th].l&&r==n[th].r){
            n[th].val=!n[th].val;
            return;
        }
        n[th].pure=0;
        n[th<<1].pure=n[th<<1|1].pure=1;
        n[th<<1].val=n[th<<1|1].val=n[th].val;
    }
    int m=(n[th].l+n[th].r)>>1;
    if(m>=r) change(l,r,th<<1);
    else if(l>m) change(l,r,th<<1|1);
    else {
        change(l,m,th<<1);
        change(m+1,r,th<<1|1);
    }
}
void out(){
    //printf("%d %d\n",ll,rr);
    if(ll==-10){
        printf("empty set");
        return;
    }
    if(!jud) printf(" ");
    else jud=0;
    if(ll&1) printf("(%d,",(ll-1)/2-1);
    else printf("[%d,",ll/2-1);
    if(rr&1) printf("%d)",(rr+1)/2-1);
    else printf("%d]",rr/2-1);
}
void query(int l,int r,int th){
    if(n[th].l==l&&n[th].r==r&&n[th].pure){
        if(n[th].val){
            if(n[th].l!=rr+1){
                if(jj) out();
                else jj=1;
                ll=n[th].l;
                rr=n[th].r;
            }
            else rr=n[th].r;
        }
        return;
    }
    int m=(n[th].l+n[th].r)>>1;
    query(l,m,th<<1);
    query(m+1,r,th<<1|1);
}

int main(){
    int t1,t2;
    char x[3],xx,yy;
    build(0,M,1);
    while(scanf("%s",x)!=EOF){
        getchar();
        scanf("%c%d,%d%c",&xx,&t1,&t2,&yy);
        t1*=2;t2*=2;
        if(xx=='(') t1++;
        if(yy==')') t2--;
        t1+=2;t2+=2;
        if(t1>t2) continue;
        if(x[0]=='U'){
            update(t1,t2,1,1);
        }
        else if(x[0]=='D'){
            update(t1,t2,1,0);
        }
        else if(x[0]=='S'){
            change(t1,t2,1);
        }
        else if(x[0]=='C'){
            update(0,t1-1,1,0);
            update(t2+1,M-1,1,0);
            change(t1,t2,1);
        }
        else{
            update(0,t1-1,1,0);
            update(t2+1,M-1,1,0);
        }
    }
    query(0,M,1);
    out();
    printf("\n");
    return 0;
}
自己生成的数据只跑了0.175s.....65536个操作。

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator