一级毛片免费不卡在线视频,国产日批视频免费在线观看,菠萝菠萝蜜在线视频免费视频,欧美日韩亚洲无线码在线观看,久久精品这里精品,国产成人综合手机在线播放,色噜噜狠狠狠综合曰曰曰,琪琪视频

POJ 2777 Count Color -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.oriental01.com - 電腦資料】

    這題其實(shí)之前寫過,應(yīng)該算是線段樹中比較簡單的,不過自己還是被坑了很長時(shí)間,就是因?yàn)橐粋(gè)小小的錯(cuò)誤,怎么找都找不到,哎,急哭了,

POJ 2777 Count Color

。

    這題在找顏色種類的時(shí)候,因?yàn)樽疃嘀挥?0種顏色,所以可以用一個(gè)整型變量來存儲,一個(gè)位代表一種顏色。這里就要考慮對位的處理了,具體見代碼。

   

#include<cstdio>#include<cstring>const int N=100005;int L,T,O;struct board{    int left,right,color;    bool ischange;}node[N<<2];void set_tree(int id,int l,int r){    node[id].left=l,node[id].right=r,node[id].color=1,node[id].ischange=false;    if(l==r)        return;    int lson=id<<1,rson=lson+1,mid=(l+r)/2;    set_tree(lson,l,mid);    set_tree(rson,mid+1,r);}void update(int id,int l,int r,int c){    if(node[id].left==l&&node[id].right==r)    {        node[id].color=1<<(c-1);        node[id].ischange=true;        return;    }    int lson=id<<1,rson=lson+1,mid=(node[id].left+node[id].right)/2;    if(node[id].ischange)    {        node[lson].ischange=true,node[rson].ischange=true;        node[lson].color=node[id].color,node[rson].color=node[id].color;        node[id].ischange=false;    }    if(r<=mid)        update(lson,l,r,c);    else if(l>mid)        update(rson,l,r,c);    else    {        update(lson,l,mid,c);        update(rson,mid+1,r,c);    }    node[id].color=node[lson].color|node[rson].color;}void query(int id,int l,int r,int &ans){    if(node[id].ischange||(node[id].left==l&&node[id].right==r))    {        ans|=node[id].color;//就是這里被坑了,我沒有加或,而是直接賦值了,當(dāng)時(shí)估計(jì)腦袋秀逗了,

電腦資料

POJ 2777 Count Color》(http://www.oriental01.com)。 return; } int lson=id<<1,rson=lson+1,mid=(node[id].left+node[id].right)/2; if(r<=mid) query(lson,l,r,ans); else if(l>mid) query(rson,l,r,ans); else { query(lson,l,mid,ans); query(rson,mid+1,r,ans); }}int main(){ int a,b,c; char s[3]; while(scanf("%d%d%d",&L,&T,&O)!=EOF) { set_tree(1,1,L); for(int i=1;i<=O;i++) { scanf("%s",s); if(s[0]=='C') { scanf("%d%d%d",&a,&b,&c); if(a>b)//這里要比較a,b的大小 update(1,b,a,c); else update(1,a,b,c); } else { scanf("%d%d",&a,&b); int ans=0,cnt=0; if(a>b) query(1,b,a,ans); else query(1,a,b,ans); for(int i=0;i<T;i++) { int t=ans&1; if(t==1) cnt++; ans=ans>>1; } printf("%d\n",cnt); } } } return 0;}

最新文章