1500 NOI2005 維修數列

2021-06-07 19:35:38 字數 981 閱讀 4204

題目思路:splay ,包括區間插入,區間刪除,**記憶體,區間反轉,區間和,區間最大子段,成段更新等操作。

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

#define max 110

#define m 501000

#define keytree ch[ch[root][1]][0]

int max(int a,int b)

int min(int a,int b)

void init()

void rot(int x,int f)

void splay(int x,int goal)

}if(!goal) root=x;

up(x);

}void rotto(int k,int goal)

down(x);

}splay(x,goal);

}void same(int pos,int num,int c)

void rev(int pos,int num)

void getsum(int pos,int num)

void maxsum()

void eraser(int x)

void insert(int pos,int num)

void del(int pos,int num)

int main()

break;

case 'r':scanf("%d%d",&pos,&num);rev(pos,num);break;

case 'g':scanf("%d%d",&pos,&num);getsum(pos,num);break;}}

}return 0;

}

1500 NOI2005 維修數列

輸入的第1 行包含兩個數n 和m m 20 000 n 表示初始時數列中數的個數,m表示要進行的運算元目。第2行包含n個數字,描述初始時的數列。以下m行,每行一條命令,格式參見問題描述中的 任何時刻數列中最多含有500 000個數,數列中任何乙個數字均在 1 000,1 000 內。插入的數字總數不...

BZOJ1500 NOI2005 維修數列

description input 輸入檔案的第1行包含兩個數n和m,n表示初始時數列中數的個數,m表示要進行的運算元目。第2行包含n個數字,描述初始時的數列。以下m行,每行一條命令,格式參見問題描述中的 output 對於輸入資料中的get sum和max sum操作,向輸出檔案依次列印結果,每個...

bzoj1500 NOI2005 維修數列

splay鼻祖級的題目?霧。insert 把第pos個數 有哨兵節點 轉到root,把第pos 1個數轉到root的右兒子,然後對c建樹然後把這棵樹插到root右兒子的左兒子處 delete 把第pos個數轉到root,把第pos tot 1個數轉到root右兒子,刪掉root右兒子的左兒子 變成0...