程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj-3225-Help with Intervals

poj-3225-Help with Intervals

編輯:C++入門知識

超級惡心的一道題目。。。

查錯查了一個小時。。。。

1,要用C++,用G++會wa。

2,注意檢查邊界。

3,注意標記的下放方式。

#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
#define maxn 200000
#define mem(a,b) (memset(a),b,sizeof(a))
#define lmin 0
#define rmax n
#define lson l,(l+r)/2,rt<<1
#define rson (l+r)/2+1,r,rt<<1|1
#define root lmin,rmax,1
#define now l,r,rt
#define int_now int l,int r,int rt
#define INF 99999999
#define LL __int64
#define mod 10007
#define eps 1e-6
#define zero(x) (fabs(x)r||rr=r)
    {
        val[rt]=x;
        rev[rt]=0;
        return;
    }
    push_down(now);
    updata(ll,rr,x,lson);
    updata(ll,rr,x,rson);
}
void fan(int ll,int rr,int_now)
{
    if(ll>r||rr=r)
    {
        if(val[rt]!=-1)val[rt]^=1;
        else  rev[rt]^=1;
        return;
    }
    push_down(now);
    fan(ll,rr,lson);
    fan(ll,rr,rson);
}
void query(int_now)
{
    if(l==r)
    {
        if(val[rt]==1)ans[l]=1;
        return;
    }
    push_down(now);
    query(lson);
    query(rson);
}
int main()
{
    int n=65537*2;
    char ch[100];
    char le,ri;
    int l,r;
    while(scanf("%s%*c%c%d,%d%c%*c",ch,&le,&l,&r,&ri)!=EOF)
    {
        if(ch[0]=='e')break;
        l=l*2;
        r=r*2;
        if(le=='(')l=l+1;
        if(ri==')')r=r-1;
        if(ch[0]=='U')
        {
            updata(l,r,1,root);
        }
        if(ch[0]=='I')
        {
            if(l-1>=0)updata(0,l-1,0,root);
            updata(r+1,n,0,root);
        }
        if(ch[0]=='D')
        {
            updata(l,r,0,root);
        }
        if(ch[0]=='C')
        {
            if(l-1>=0)updata(0,l-1,0,root);
            updata(r+1,n,0,root);
            fan(l,r,root);
        }
        if(ch[0]=='S')
        {
            fan(l,r,root);
        }
    }
    query(root);
    int flag=0;
    l=r=-1;
    for(int i=0;i<=n;i++)
    {
        if(ans[i])
        {
            if(l==-1)
            {
                l=i;
                if(flag)printf(" ");
                if(l%2)printf("(%d",l/2);
                else printf("%[%d",l/2);
                flag++;
            }
        }
        else
        {
            if(l!=-1)
            {
                r=i-1;
                if(r%2)printf(",%d)",r/2+1);
                else printf(",%d]",r/2);
                flag++;
                l=r=-1;
            }
        }
    }
    if(flag==0)
    {
        printf("empty set");
    }
    puts("");
    return 0;
}






















  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved