輸入的第1 行包含兩個數n 和m(m ≤20 000),n 表示初始時數列中數的個數,m表示要進行的運算元目。
第2行包含n個數字,描述初始時的數列。
以下m行,每行一條命令,格式參見問題描述中的**。
任何時刻數列中最多含有500 000個數,數列中任何乙個數字均在[-1 000, 1 000]內。
插入的數字總數不超過4 000 000個,輸入檔案大小不超過20mbytes。
對於輸入資料中的get-sum和max-sum操作,向輸出檔案依次列印結果,每個答案(數字)佔一行。
9 82 -6 3 5 1 -5 -3 6 3
get-sum 5 4
max-sum
insert 8 3 -5 7 2
delete 12 1
make-same 3 3 2
reverse 3 6
get-sum 5 4
max-sum
-110110
模板題。。。
1 #include2 #include3 #include4 #include5 #include6 #include7 #includeview code8 #include9 #include10 #include11 #include
12#define inf 1000000000
13#define maxn 1000000+5
14#define maxm 10000+5
15#define eps 1e-10
16#define ll long long
17#define for0(i,n) for(int i=0;i<=(n);i++)
18#define for1(i,n) for(int i=1;i<=(n);i++)
19#define for2(i,x,y) for(int i=(x);i<=(y);i++)
20#define for3(i,x,y) for(int i=(x);i>=(y);i--)
21#define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
22using
namespace
std;
23int
read()
26while(ch>='
0'&&ch<='9')
27return x*f;28}
29int
n,m,rt,cnt;
30int a[maxn],id[maxn],fa[maxn],c[maxn][2
];31
intsum[maxn],s[maxn],v[maxn],mx[maxn],lx[maxn],rx[maxn];
32bool
tag[maxn],rev[maxn];
33 queueq;
34void update(int
x)42
void pushdown(int
x)52
else56}
57if
(rev[x])62}
63void rotate(int x,int &k)
71void splay(int x,int &k)
78else
rotate(x,k);79}
80}81int find(int x,int
rk)88
void rec(int
x)95
int split(int k,int
tot)
100void query(int k,int
tot)
104void modify(int k,int tot,int
val)
111void rever(int k,int
tot)
119}
120void erase(int k,int
tot)
125void build(int l,int r,int
f)134
else build(l,mid-1,mid),build(mid+1
,r,mid);
135 v[now]=a[mid];fa[now]=last;update(now);
136 c[last][mid>=f]=now;
137}
138void insert(int k,int
tot)
150int
main()
170if(ch[0]=='r'
)rever(k,tot);
171if(ch[0]=='g'
)query(k,tot);
172}
173return0;
174 }
1500 NOI2005 維修數列
題目思路 splay 包括區間插入,區間刪除,記憶體,區間反轉,區間和,區間最大子段,成段更新等操作。include include include include include include include include include include includeusing namesp...
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...