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

不知道哪里错了,哪位大牛给看下啊,改了好久了

Posted by luoxiaozheng at 2011-05-13 03:50:17 on Problem 2777
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxlen=100010;
struct node
{
    int l;
    int r;
    int sure;
    int c;
}a[maxlen*4];
bool vis[40];
void build(int l,int r,int step)
{
    a[step].l=l;
    a[step].r=r;
    a[step].c=0;
    a[step].sure=0;
    if(l==r)
    {
        a[step].c=1;
        a[step].sure=1;
        return;
    }
    else
    {

        build(l,(l+r)/2,step*2);
        build((l+r)/2+1,r,step*2+1);
    }
}
void insert(int l,int r,int c,int step)
{
    //cout<<a[step].l<<' '<<a[step].r<<' '<<c<<' '<<step<<endl;
    if(a[step].c==c&&a[step].sure)
        return ;
    if(a[step].l==l&&a[step].r==r)
    {
        a[step].c=c;
        a[step].sure=1;
        return ;
    }
    int mid=(a[step].l+a[step].r)/2;
    if(a[step].l==a[step].r)
        return ;
    if(a[step].sure)
    {
        a[step].sure=0;
        a[step*2].sure=1;
        a[step*2].c=a[step].c;
        a[step*2+1].sure=1;
        a[step*2+1].c=a[step].c;
    }
    if(mid>=r)
    {
        insert(l,r,c,step*2);
    }
    else
    {
        if(mid<l)
        {
            insert(l,r,c,step*2+1);
        }
        else
        {
            insert(l,mid,c,step*2);
            insert(mid+1,r,c,step*2+1);
        }
    }
}
void query(int l,int r,int step)
{
    //cout<<a[step].l<<' '<<l<<' '<<a[step].r<<' '<<r<<' '<<a[step].c<<' '<<a[step].sure <<endl;
    if(a[step].l>=l&&a[step].r<=r&&a[step].sure)
    {
        //cout<<"return "<<endl;
            vis[a[step].c]=1;
            return ;
    }
    int mid=(a[step].l+a[step].r)/2;
    if(a[step].l==a[step].r)
        return ;
    if(a[step].sure)
    {
        a[step*2].sure=1;
        a[step*2].c=a[step].c;
        a[step*2+1].sure=1;
        a[step*2+1].c=a[step].c;
    }
    if(mid>=r)
    {
        query(l,r,step*2);
    }
    else
    {
        if(mid<l)
        {
            query(l,r,step*2+1);
        }
        else
        {
            //cout<<"mid"<<endl;
            query(l,mid,step*2);
            query(mid+1,r,step*2+1);
        }
    }
}
int main()
{

    int L,T,O;
    char oper;
    int i;
    int l,r,c;
    int temp;
    int j;
    scanf("%d%d%d",&L,&T,&O);
    {
        build(1,L,1);
        //cout<<"c f"<<endl;
        for(i=0;i<O;i++)
        {
            getchar();
            scanf("%c",&oper);
            if(oper=='C')
            {
                scanf("%d%d%d",&l,&r,&c);
                if(l>r)
                    {
                        temp=l;
                        l=r;
                        r=temp;
                    }
                insert(l,r,c,1);
            }
            else
            {
                int count=0;
                memset(vis,0,sizeof(vis));
                scanf("%d%d",&l,&r);
                if(l>r)
                    {
                        temp=l;
                        l=r;
                        r=temp;
                    }
                query(l,r,1);
                for(j=0;j<30;j++)
                {
                    if(vis[j])
                        count++;
                }
                printf("%d\n",count);
                //cout<<count<<endl;
            }
        }
    }
}

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