Noi2005維護數列

2022-07-13 20:03:15 字數 1919 閱讀 4234

#include#include#include#include#include#define fo(i,a,b) for(i=a;i<=b;i++)

#define fod(i,a,b) for(i=a;i>=b;i--)

using namespace std;

const int maxn=520007;

int i,j,k,l,n,m,ans,root,posi;

int f[maxn],a[maxn],d[maxn],b[maxn],x,y,key[maxn],shan[maxn],num,zhi,tt[maxn][2];

char s[20];

struct nodet[maxn];

void update(int x)

void makesame(int x,int y)

bool son(int x)

void rotate(int x)

void overturn(int x)

void down(int x)

if(t[x].add!=maxn) }

void remove(int x,int y)

while(x!=y);

while(d[0])down(d[d[0]--]);

}int insert(int x)

void splay(int x,int y)

if(!y)

root=x;

}int build(int l,int r,int y)

int kth(int x,int k)

void del(int x)

int main()

else if(s[0]=='d')

//從第posi個位置開始,刪除k個元素

else if(s[2]=='k')

//連續k個數字,值改為某個固定值

else if(s[0]=='r')

//從第posi個數字開始,翻轉其後的k個數字

else if(s[0]=='g')

//從第posi個數字開始,k個數字之和

else

}}

poj3580

#include using namespace std;

#define n 510000

#define ls(x) ch[x][0]

#define rs(x) ch[x][1]

#define which(x) (ch[fa[x]][1]==x)

#define inf 0xfffffff

int n,m,cnt,root,lp,rp;

char s[11];

int ch[n][2],a[n];

int val[n],ad[n],size[n],rev[n],mn[n],fa[n];

void read(int &x)

void update(int x)

int build(int l,int r)

void reverse(int x)

void add(int x,int v)

void pushdown(int x)

if(ad[x])

}void down(int x)

void rotate(int x)

void splay(int x,int tar)

}if(tar==0)root=x;

}int rank(int x,int k)

int get(int l,int r)

int main()

else if(s[1]=='i')

else if(s[1]=='m')

else if(s[1]=='d')

else if(s[4]=='e')

else

}}

noi2005維護數列

請寫乙個程式,要求維護乙個數列,支援以下 6 種操作 請注意,格式欄 中的下劃線 表示實際輸入檔案中的空格 操作編號 輸入檔案中的格式 說明1.插入 insert posi tot c1 c2 c tot 在當前數列的第 posi 個數字後插入 tot 個數字 c1,c2,c tot 若在數列首插 ...

NOI2005 維護數列

陳年老題。我就 碼了4k多。主要就是用splay,然後處理區間上的東西 區間反轉就和模板一樣,但是要記得反轉leftmax和rightmax 區間賦值就把那個區間提取出來,然後給子樹根打個same標記,表示下面的全一樣。區間求最大子段和就和線段樹的套路一樣。區間插入就先弄好一顆平衡樹,然後把原平衡樹...

NOI2005 維護數列

傳送門 我還是沒有逃過在這道題上debug好久的命運 我是使用 fhq treap 來做的這道題。寫的時候寫的挺爽的 調的時候真難受。首先我們先來說說咋做吧。前5個操作對於 fhq treap 來說不在話下,只要多打兩個標記就可以了。但是如何求最大子段和?於是乎我們再打三個標記來維護它 霧 然後我們...