bzoj1500 noi2005 維護數列

2022-05-21 14:12:11 字數 1273 閱讀 6322

(題目鏈結)

要求維護數列,操作有區間刪除,區間插入,區間反轉,區間修改,區間求和,求最大連續子段。

願有生之年再也不寫splay。**模的hzwer。

2017.3.24:upd了一下**。

// baoj1500

#include#include#include#include#include#include#include#define ll long long

#define inf (1ll<<30)

#define pi acos(-1.0)

#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);

using namespace std;

inline int gi()

while (ch>='0' && ch<='9')

return x*f;

}const int maxn=1000010;

int a[maxn],fa[maxn],n,m,rt,sz;

char ch[30];

struct node

}tr[maxn];

queueq;

void pushup(int k)

void pushdown(int k)

else

} if (tr[k].rev)

}void rotate(int x,int &k)

void splay(int x,int &k)

rotate(x,k); }}

int find(int k,int x)

void recycle(int k)

int split(int l,int r)

int query(int l,int r)

void modify(int l,int r,int val)

void reverse(int l,int r)

}void erase(int l,int r)

void build(int &k,int l,int r,int f)

void insert(int k,int tot)

int main()

else if (ch[0]=='r') reverse(k,k+tot-1);

else if (ch[0]=='g') printf("%d\n",query(k,k+tot-1));

} return 0;

}

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...

BZOJ 1500 NOI2005 維修數列

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