BZOJ-1251: 序列終結(jié)者(Splay)

題目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1251

代碼(用splay樹維護區(qū)間掸冤,注意每次不是直接splay(l-1,roof),splay(r+1,R[roof])而是splay(select(l-1,roof),roof),splay(select(r+1,R[roof]),R[roof])):

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
using namespace std;
#define MAXN 50010
#define L(t) T[t].left
#define R(t) T[t].right
#define M(t) T[t].Max
#define D(t) T[t].delta
#define F(t) T[t].flag
#define S(t) T[t].size
#define K(t) T[t].key
#define C(r,t) (S(L(t))>r)
#define inf 0x7fffffff
struct node {
        int left,right,Max,delta,size,key;
        bool flag;
        node(){left=right=delta=flag=size=Max=key=0;}
} T[MAXN];
int roof=0,v=0,n,m;
void Insert(int &t) {
        if (!t){S(t=++v)=1;return ;}
        S(t)++; Insert(R(t));
}
void pushdown(int t) {
        if (t){
               if (F(t))
                  {swap(L(t),R(t));F(L(t))^=true,F(R(t))^=true;F(t)^=true;}
               if (D(t))
                  {M(t)+=D(t),K(t)+=D(t);D(L(t))+=D(t),D(R(t))+=D(t);D(t)=0;}
        }
}
void update(int t) 
{pushdown(L(t)),pushdown(R(t));S(t)=S(L(t))+S(R(t))+1;M(t)=max(max(M(L(t)),M(R(t))),K(t));}
void zag(int &t) {
        int k;pushdown(t);pushdown(k=R(t));
        R(t)=L(k);update(t);L(k)=t;update(k);
        t=k;
}
void zig(int &t) {
        int k;pushdown(t);pushdown(k=L(t));
        L(t)=R(k);update(t);R(k)=t;update(k);
        t=k;
}
bool splay(int r,int &t,bool flag) {
        pushdown(t);
        if (S(L(t))==r) return false;
        bool w=splay(C(r,t)?r:r-S(L(t))-1,C(r,t)?L(t):R(t),true);
        if (!w){if (!flag){if (C(r,t)) zig(t); else zag(t);}
        } else {
               if (C(r,t)) 
                   {pushdown(L(t));if (C(r,L(t))) zig(t) ; else zag(L(t));zig(t);} else
            {pushdown(R(t));if (!C(r-S(L(t))-1,R(t))) zag(t) ; else zig(R(t));zag(t);}
        }
        return w^true;
}
int main() {
        M(0)=-inf;
        scanf("%d%d",&n,&m);
        for (int i=0;i<=n+1;i++) Insert(roof),splay(i,roof,false);
        while (m--) {
               int x,l,r;
               scanf("%d%d%d",&x,&l,&r);
               splay(l-1,roof,false);splay(r-S(L(roof)),R(roof),false);
               pushdown(roof);pushdown(R(roof));pushdown(L(R(roof)));
               if (x==1) {scanf("%d",&x);D(L(R(roof)))+=x;} else 
               {
                       if (x==2) {F(L(R(roof)))^=true;} else printf("%d\n",M(L(R(roof))));
               }
        }
        return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绍些,居然都是意外死亡,警方通過查閱死者的電腦和手機耀鸦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門柬批,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人袖订,你說我怎么就攤上這事氮帐。” “怎么了洛姑?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵上沐,是天一觀的道長。 經(jīng)常有香客問我楞艾,道長参咙,這世上最難降的妖魔是什么龄广? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蕴侧,結(jié)果婚禮上择同,老公的妹妹穿的比我還像新娘。我一直安慰自己净宵,他們只是感情好敲才,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著择葡,像睡著了一般紧武。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上敏储,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天脏里,我揣著相機與錄音,去河邊找鬼虹曙。 笑死,一個胖子當著我的面吹牛番舆,可吹牛的內(nèi)容都是我干的酝碳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼恨狈,長吁一口氣:“原來是場噩夢啊……” “哼疏哗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起禾怠,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤返奉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吗氏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芽偏,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年弦讽,在試婚紗的時候發(fā)現(xiàn)自己被綠了污尉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡往产,死狀恐怖被碗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仿村,我是刑警寧澤锐朴,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蔼囊,受9級特大地震影響焚志,放射性物質(zhì)發(fā)生泄漏衣迷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一娩嚼、第九天 我趴在偏房一處隱蔽的房頂上張望蘑险。 院中可真熱鬧,春花似錦岳悟、人聲如沸佃迄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呵俏。三九已至,卻和暖如春滔灶,著一層夾襖步出監(jiān)牢的瞬間普碎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工录平, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留麻车,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓斗这,卻偏偏與公主長得像动猬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子表箭,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 咦免钻,這是什么彼水? 看到潔白的包子上有一個黑黑的東西,細細看去极舔,竟然是一只死蒼蠅凤覆。惡心的我差點沒吐出來。 這是我第二次...
    雁旋閱讀 403評論 0 0
  • 有些東西在一點點消失拆魏,情緒在一次次放大叛赚,那份靜或許只能停在筆尖上了,人心變得越來越復(fù)雜(不可捉摸)稽揭,少了談吐的優(yōu)雅...
    不留心閱讀 208評論 2 3
  • M2與M1之間的差額主要是居民儲蓄存款和企業(yè)定期存款 M2與M1增速之間的剪刀差可以近似看作判斷資金活躍程度尤其是...
    誠品閱讀 325評論 0 0