文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>pku2777 Count Color

pku2777 Count Color

时间:2010-09-23  来源:Z_Q_2010

 

#include<stdio.h>
#include<algorithm>
using namespace std;

const int MAX=100000;
int L,T,O;
int tree[MAX*3];    //每个结点表示其对应区间段的颜色


void update(int node,int l,int r,int lc,int rc,int newValue)
{
    if(l==lc&&r==rc)
    {
        tree[node]=newValue;
        return;
    }

    if(tree[node]>0)    //自上向下更新结点

    {
        tree[node<<1]=tree[(node<<1)+1]=tree[node];
        tree[node]=0;
    }
    
    int middle=(l+r)>>1;
    if(middle<lc) update((node<<1)+1,middle+1,r,lc,rc,newValue);
    else if(middle>=rc) update(node<<1,l,middle,lc,rc,newValue);
    else
    {
        update(node<<1,l,middle,lc,middle,newValue);
        update((node<<1)+1,middle+1,r,middle+1,rc,newValue);
    }
}

void inquire(int node,int l,int r,int lc,int rc,int &value)
{
    if(tree[node]&&l==lc&&r==rc)                                
    {
        value|=1<<tree[node];
        return ;
    }

    if(tree[node]>0) tree[node<<1]=tree[(node<<1)+1]=tree[node];    //更新深入


    int middle=(l+r)>>1;
    if(middle<lc) inquire((node<<1)+1,middle+1,r,lc,rc,value);
    else if(middle>=rc) inquire(node<<1,l,middle,lc,rc,value);
    else
    {
        inquire(node<<1,l,middle,lc,middle,value);
        inquire((node<<1)+1,middle+1,r,middle+1,rc,value);
    }
}

int convertSum(int &value)    //提取颜色

{
    int sum=0;
    for(int i=1;i<=30;i++) if(value&(1<<i)) sum++;
    return sum;
}

int main()
{
    scanf("%d%d%d",&L,&T,&O);
    tree[1]=1;

    int a,b,c;
    char str[2];
    for(int i=0;i<O;i++)
    {
        scanf("%s",str);
        if(str[0]=='C')
        {
            scanf("%d%d%d",&a,&b,&c);
            if(a>b) swap(a,b);
            update(1,1,L,a,b,c);
        }
        else
        {
            scanf("%d%d",&a,&b);
            if(a>b) swap(a,b);
            c=0;
            inquire(1,1,L,a,b,c);
            printf("%d\n",convertSum(c));
        }
    }
    return 0;
}


 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载