青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
線段樹維護區間取反、區間覆蓋。
拿日華哥哥的代碼對拍了好久終于AC啦。
以下是我的代碼:
/*
 * Author:  lee1r
 * Created Time:  2011/8/21 10:04:48
 * File Name: hdu3397.cpp
 
*/
#include
<iostream>
#include
<sstream>
#include
<fstream>
#include
<vector>
#include
<list>
#include
<deque>
#include
<queue>
#include
<stack>
#include
<map>
#include
<set>
#include
<bitset>
#include
<algorithm>
#include
<cstdio>
#include
<cstdlib>
#include
<cstring>
#include
<cctype>
#include
<cmath>
#include
<ctime>
#define L(x) ((x)<<1)
#define R(x) ((x)<<1|1)
#define Half(x) ((x)>>1)
#define Lowbit(x) ((x)&(-(x)))
using namespace std;
const int kInf(0x7f7f7f7f);
const double kEps(1e-8);
typedef unsigned 
int uint;
typedef 
long long int64;
typedef unsigned 
long long uint64;

int scanf(int &num)
{
    
char in;
    
while((in=getchar())!=EOF && (in>'9' || in<'0'));
    
if(in==EOF) return 0;
    num
=in-'0';
    
while(in=getchar(),in>='0' && in<='9') num*=10,num+=in-'0';
    
return 1;
}

const int kMaxn(100007);

struct Node
{
    
int a,b;
    
int max0,lmax0,rmax0;
    
int max1,lmax1,rmax1;
    
int cnt0,cnt1;
    
int cover,reverse;
};

int N,M;
bool r[kMaxn];
Node tree[kMaxn
<<2];

void PushDown(int node)
{
    
if(tree[node].cover!=-1)
    {
        tree[L(node)].reverse
=tree[R(node)].reverse=0;
        tree[L(node)].cover
=tree[R(node)].cover=tree[node].cover;
        
if(tree[node].cover==0)
        {
            tree[L(node)].cnt0
=tree[L(node)].max0=tree[L(node)].lmax0=tree[L(node)].rmax0=(tree[L(node)].b-tree[L(node)].a+1);
            tree[L(node)].cnt1
=tree[L(node)].max1=tree[L(node)].lmax1=tree[L(node)].rmax1=0;
            tree[R(node)].cnt0
=tree[R(node)].max0=tree[R(node)].lmax0=tree[R(node)].rmax0=(tree[R(node)].b-tree[R(node)].a+1);
            tree[R(node)].cnt1
=tree[R(node)].max1=tree[R(node)].lmax1=tree[R(node)].rmax1=0;
        }
        
else
        {
            tree[L(node)].cnt0
=tree[L(node)].max0=tree[L(node)].lmax0=tree[L(node)].rmax0=0;
            tree[L(node)].cnt1
=tree[L(node)].max1=tree[L(node)].lmax1=tree[L(node)].rmax1=(tree[L(node)].b-tree[L(node)].a+1);
            tree[R(node)].cnt0
=tree[R(node)].max0=tree[R(node)].lmax0=tree[R(node)].rmax0=0;
            tree[R(node)].cnt1
=tree[R(node)].max1=tree[R(node)].lmax1=tree[R(node)].rmax1=(tree[R(node)].b-tree[R(node)].a+1);
        }
        tree[node].cover
=-1;
    }
    
if(tree[node].reverse)
    {
        tree[node].reverse
=0;
        swap(tree[L(node)].max0,tree[L(node)].max1);
        swap(tree[L(node)].lmax0,tree[L(node)].lmax1);
        swap(tree[L(node)].rmax0,tree[L(node)].rmax1);
        swap(tree[L(node)].cnt0,tree[L(node)].cnt1);
        swap(tree[R(node)].max0,tree[R(node)].max1);
        swap(tree[R(node)].lmax0,tree[R(node)].lmax1);
        swap(tree[R(node)].rmax0,tree[R(node)].rmax1);
        swap(tree[R(node)].cnt0,tree[R(node)].cnt1);
        
        tree[L(node)].reverse
=!tree[L(node)].reverse;
        tree[R(node)].reverse
=!tree[R(node)].reverse;
    }
}

void PushUp(int node)
{
    tree[node].max0
=max(tree[L(node)].max0,tree[R(node)].max0);
    tree[node].max0
=max(tree[node].max0,tree[L(node)].rmax0+tree[R(node)].lmax0);
    
if(tree[L(node)].lmax0==tree[L(node)].b-tree[L(node)].a+1)
        tree[node].lmax0
=tree[L(node)].lmax0+tree[R(node)].lmax0;
    
else
        tree[node].lmax0
=tree[L(node)].lmax0;
    
if(tree[R(node)].rmax0==tree[R(node)].b-tree[R(node)].a+1)
        tree[node].rmax0
=tree[R(node)].rmax0+tree[L(node)].rmax0;
    
else
        tree[node].rmax0
=tree[R(node)].rmax0;
    
    tree[node].max1
=max(tree[L(node)].max1,tree[R(node)].max1);
    tree[node].max1
=max(tree[node].max1,tree[L(node)].rmax1+tree[R(node)].lmax1);
    
if(tree[L(node)].lmax1==tree[L(node)].b-tree[L(node)].a+1)
        tree[node].lmax1
=tree[L(node)].lmax1+tree[R(node)].lmax1;
    
else
        tree[node].lmax1
=tree[L(node)].lmax1;
    
if(tree[R(node)].rmax1==tree[R(node)].b-tree[R(node)].a+1)
        tree[node].rmax1
=tree[R(node)].rmax1+tree[L(node)].rmax1;
    
else
        tree[node].rmax1
=tree[R(node)].rmax1;
    
    tree[node].cnt0
=tree[L(node)].cnt0+tree[R(node)].cnt0;
    tree[node].cnt1
=tree[L(node)].cnt1+tree[R(node)].cnt1;
}

void Build(int node,int x,int y)
{
    tree[node].a
=x;
    tree[node].b
=y;
    tree[node].cover
=-1;
    tree[node].reverse
=0;
    
if(x==y)
    {
        tree[node].cnt0
=tree[node].max0=tree[node].lmax0=tree[node].rmax0=!r[x];
        tree[node].cnt1
=tree[node].max1=tree[node].lmax1=tree[node].rmax1=r[x];
    }
    
else
    {
        
int m(Half(x+y));
        Build(L(node),x,m);
        Build(R(node),m
+1,y);
        PushUp(node);
    }
}

void Modify(int node,int x,int y,int type)
{
    
if(x<=tree[node].a && tree[node].b<=y)
    {
        
if(type==0)
        {
            tree[node].reverse
=0;
            tree[node].cover
=0;
            tree[node].cnt0
=tree[node].max0=tree[node].lmax0=tree[node].rmax0=tree[node].b-tree[node].a+1;
            tree[node].cnt1
=tree[node].max1=tree[node].lmax1=tree[node].rmax1=0;
        }
        
else if(type==1)
        {
            tree[node].reverse
=0;
            tree[node].cover
=1;
            tree[node].cnt0
=tree[node].max0=tree[node].lmax0=tree[node].rmax0=0;
            tree[node].cnt1
=tree[node].max1=tree[node].lmax1=tree[node].rmax1=tree[node].b-tree[node].a+1;
        }
        
else if(type==2)
        {
            tree[node].reverse
=!tree[node].reverse;
            swap(tree[node].cnt0,tree[node].cnt1);
            swap(tree[node].max0,tree[node].max1);
            swap(tree[node].lmax0,tree[node].lmax1);
            swap(tree[node].rmax0,tree[node].rmax1);
        }
    }
    
else
    {
        PushDown(node);
        
int m(Half(tree[node].a+tree[node].b));
        
if(m>=x)
            Modify(L(node),x,y,type);
        
if(m<y)
            Modify(R(node),x,y,type);
        PushUp(node);
    }
}

int Query1(int node,int x,int y)
{
    
if(x<=tree[node].a && tree[node].b<=y)
        
return tree[node].cnt1;
    PushDown(node);
    
int m(Half(tree[node].a+tree[node].b)),re(0);
    
if(m>=x)
        re
+=Query1(L(node),x,y);
    
if(m<y)
        re
+=Query1(R(node),x,y);
    
return re;
}

int Query2(int node,int x,int y)
{
    
if(x<=tree[node].a && tree[node].b<=y)
        
return tree[node].max1;
    PushDown(node);
    
int m(Half(tree[node].a+tree[node].b));
    
if(m>=y)
        
return Query2(L(node),x,y);
    
if(m<x)
        
return Query2(R(node),x,y);
    
return max(max(Query2(L(node),x,m),Query2(R(node),m+1,y)),min(tree[L(node)].rmax1,m-x+1)+min(tree[R(node)].lmax1,y-m));
}

int main()
{
    
int T;
    scanf(T);
    
while(T--)
    {
        scanf(N);
        scanf(M);
        
for(int i=1;i<=N;i++)
        {
            
int t;
            scanf(t);
            
if(t)
                r[i]
=true;
            
else
                r[i]
=false;
        }
        
//  Input
        
        Build(
1,1,N);
        
//  Build
        
        
while(M--)
        {
            
int c,a,b;
            scanf(c);
            scanf(a);
            scanf(b);
            a
++;b++;
            
if(c<=2)
                Modify(
1,a,b,c);
            
else if(c==3)
                printf(
"%d\n",Query1(1,a,b));
            
else
                printf(
"%d\n",Query2(1,a,b));
        }
    }
    
    
return 0;
}
posted on 2011-08-22 18:57 lee1r 閱讀(485) 評論(2)  編輯 收藏 引用 所屬分類: 題目分類:數據結構

FeedBack:
# re: HDU 3397 Sequence operation[未登錄]
2011-08-22 19:02 | Starry
好飄逸的代碼~  回復  更多評論
  
# re: HDU 3397 Sequence operation
2011-08-22 19:05 | snowye
DBL  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区av在线| 国产精品成人免费精品自在线观看| 欧美α欧美αv大片| 久久综合影音| 久久偷看各类wc女厕嘘嘘偷窃| 久久精品盗摄| 欧美aa国产视频| 亚洲三级电影在线观看| 免费毛片一区二区三区久久久| 欧美成人午夜77777| 亚洲日本va在线观看| 一区二区三区国产盗摄| 午夜日韩福利| 男女视频一区二区| 国产精品区一区| 亚洲激情视频在线| 亚洲欧美日韩精品久久| 久久人91精品久久久久久不卡| 亚洲国产婷婷| 欧美在线影院| 久久久国产精品一区| 伊人久久婷婷| 夜夜夜精品看看| 性欧美超级视频| 欧美二区在线看| 亚洲一区二区三区色| 美女久久网站| 国产日韩欧美a| 夜色激情一区二区| 免费观看30秒视频久久| 亚洲婷婷在线| 欧美精品国产精品日韩精品| 国产亚洲欧美日韩在线一区| 夜夜狂射影院欧美极品| 久久精品亚洲一区二区| 99热精品在线| 欧美激情自拍| 永久免费精品影视网站| 欧美一区1区三区3区公司| 91久久精品国产91久久性色tv | 国产午夜精品久久久久久久| 一本大道av伊人久久综合| 蜜乳av另类精品一区二区| 亚洲欧美日韩精品一区二区| 欧美日韩精品免费观看视一区二区 | 久久免费视频这里只有精品| 一本色道久久88综合亚洲精品ⅰ| 裸体一区二区三区| 激情六月综合| 久久久噜噜噜久久| 欧美一区二区三区四区视频| 国产精品免费久久久久久| 亚洲一区视频在线观看视频| 亚洲国产二区| 欧美激情精品久久久久| 精品69视频一区二区三区| 久久爱www.| 欧美一区二区三区在线观看| 国产伦精品一区二区三区在线观看 | 久久国产精品一区二区三区| 亚洲一区二区三区777| 国产精品你懂的| 午夜视频在线观看一区| 亚洲在线1234| 国产亚洲精品久久久久婷婷瑜伽| 久久岛国电影| 久久久久久91香蕉国产| 亚洲国产高清在线观看视频| 欧美a级一区| 欧美成人一品| 亚洲夜晚福利在线观看| 日韩视频免费观看| 美女日韩欧美| 午夜精品剧场| 一区二区亚洲精品国产| 欧美黑人一区二区三区| 欧美成人综合网站| 在线亚洲免费视频| 亚洲永久精品大片| 悠悠资源网久久精品| 欧美激情精品久久久久久大尺度 | 国产精品久久久久久久浪潮网站 | 一区二区三区四区在线| 亚洲午夜国产成人av电影男同| 国产婷婷色一区二区三区四区| 欧美jizz19性欧美| 欧美午夜精品理论片a级按摩| 久久精品视频在线免费观看| 欧美成人综合网站| 欧美资源在线| 欧美精品1区2区3区| 欧美有码在线观看视频| 久久综合给合| 午夜精品久久久久久久久久久久| 久久久久久久久久久久久9999| 日韩亚洲成人av在线| 亚洲免费一级电影| 亚洲人成网站777色婷婷| 亚洲欧美福利一区二区| 亚洲国产经典视频| 亚洲欧美日韩在线一区| 日韩一级二级三级| 欧美一区二区三区视频在线 | 亚洲视频福利| 亚洲激情网站| 欧美在线你懂的| 一区二区欧美亚洲| 久久综合伊人77777| 亚洲午夜av在线| 噜噜噜久久亚洲精品国产品小说| 性欧美video另类hd性玩具| 欧美激情一区二区三级高清视频| 欧美一区二区三区四区高清| 欧美激情2020午夜免费观看| 久久综合国产精品| 国产日韩精品综合网站| 99精品热视频| 在线亚洲一区观看| 欧美国产日产韩国视频| 免费欧美电影| 在线成人h网| 久久久.com| 久久天堂精品| 国内精品伊人久久久久av影院| 一区二区三区波多野结衣在线观看| 亚洲电影免费观看高清完整版在线观看| 亚洲一区在线播放| 亚洲欧美视频一区| 久久男人资源视频| 欧美激情影音先锋| 国语自产偷拍精品视频偷| 亚洲天堂网在线观看| 日韩视频中文字幕| 欧美国产欧美综合| 亚洲茄子视频| 99亚洲视频| 欧美色大人视频| 国产精品99久久久久久久久| 亚洲一区在线播放| 国产精品美女www爽爽爽视频| 一本大道av伊人久久综合| 国产精品99久久久久久www| 欧美日韩少妇| 亚洲欧美日本日韩| 久久免费视频在线观看| 在线精品亚洲| 欧美精品麻豆| 亚洲视频精品在线| 久久精品亚洲国产奇米99| 一色屋精品视频免费看| 欧美福利视频一区| 在线视频精品一| 久久精品国产91精品亚洲| 国内伊人久久久久久网站视频| 久久噜噜亚洲综合| 亚洲欧洲日产国码二区| 亚洲欧美日韩系列| 激情久久中文字幕| 欧美日韩国产在线看| 午夜精品在线看| 欧美va天堂在线| 99视频一区二区| 国产欧美精品| 免费久久99精品国产自在现线| 亚洲精品黄网在线观看| 午夜性色一区二区三区免费视频| 国产欧美一区二区三区久久| 久久天天狠狠| 一本一本a久久| 久久在线免费视频| 一本色道久久综合亚洲精品按摩| 国产精品嫩草影院av蜜臀| 久久人人爽人人爽| 亚洲无亚洲人成网站77777 | 亚洲日本中文字幕免费在线不卡| 亚洲欧美清纯在线制服| 黄色欧美日韩| 国产精品乱人伦一区二区| 农夫在线精品视频免费观看| 中文网丁香综合网| 亚洲国产成人精品女人久久久 | 99视频热这里只有精品免费| 久久se精品一区二区| 亚洲免费成人| 黄色国产精品| 国产伦精品一区二区三区| 欧美精品观看| 美女露胸一区二区三区| 亚洲在线国产日韩欧美| 亚洲欧洲日本在线| 免费观看在线综合色| 久久国产主播| 久久综合久久综合久久| 亚洲欧美成人精品| 亚洲另类视频| 欧美国产日韩xxxxx| 久久噜噜噜精品国产亚洲综合| 亚洲视频一区在线| 一本一本久久a久久精品综合麻豆| 精久久久久久久久久久|