給出乙個含有n個結點的環,編號分別為1..n,環上的點帶有權值(可正可負),現要動態的修改某個點的權值,求每次修改後環上的最大連續和,但不能是整個序列的和。
第一行為乙個整數n(4<=n<=100000);
第二行為n個用空格分開的整數;
第三行為乙個整數m(4<=m<=100000),表示修改的次數(絕對值小於等於1000);
接下來m行,每行兩個整數a和b(-1000<=b<=1000),表示將序列中的第a個數的值,修改為b。
對於每個修改,輸出修改後環上的最大連續和。
3 -2 1 2 -5
2 -2
5 -5
2 -4
5 -1
給定乙個環,要求維護這個環上的最大連續和,只有修改操作。
我們首先分析在沒有修改的情況下的最大連續和。乙個環上的最大連續和就是1~n序列的最大連續和與總和減去1~n序列的最小連續和中的最大值。對於得出的答案恰好等於總和的情況,我們將總和減去最小連續和就是答案了。
非常尷尬的寫了splay。。。#include#include#includeusing namespace std;
inline int read()
int root,cnt,c[100005];
int n,m,v;
struct splay_tree
}tree[100005];
inline void pmax(int v,int f)
inline void pmin(int v,int f)
inline void pushup(int v)
inline void rotate(int v)
inline void splay(int v,int goal)pushup(v);if(!goal)root=v;
return ;
}inline int build(int l,int r,int fa)
inline void kth(int k)
}v=v;return ;
}inline void pre(int x,int y)
inline void change(int x,int y)
int main(){
n=read();
int i,x,y;
for(i=1;i<=n;i++)c[i]=read();
tree[++cnt].newnode(0,0);
tree[++cnt].newnode(1,0);
tree[1].s[1]=2;root=1;
tree[2].s[0]=build(1,n,2);
m=read();
for(i=1;i<=m;i++){
x=read();y=read();x++;change(x,y);
if(tree[root].maxx==tree[root].sum){cout<
POJ 2750 雞兔同籠
時間限制 1000m 記憶體限制 65536kb 描述乙個籠子裡面關了雞和兔子 雞有2隻腳,兔子有4隻腳,沒有例外 已經知道了籠子裡面腳的總數a,問籠子裡面至少有多少只動物,至多有多少只動物 輸入第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,每行乙個正整數a a 32768 輸出輸...
POJ 最大連續子串行和
給定乙個整數序列,找到乙個具有最大和的連續子串行 子串行最少包含乙個元素 返回其最大和。例項輸入 2,1,3,4,1,2,1,5,4 例項輸出 6 連續子串行4,1,2,1的和最大,為 6。下面介紹動態規劃的做法,複雜度為 o n 步驟 1 令狀態 dp i 表示以 a i 作為末尾的連續序列的最大...
百練POJ2750 雞兔同籠
總時間限制 1000ms 記憶體限制 65536kb 描述乙個籠子裡面關了雞和兔子 雞有2隻腳,兔子有4隻腳,沒有例外 已經知道了籠子裡面腳的總數a,問籠子裡面至少有多少只動物,至多有多少只動物。輸入一行,乙個正整數a a 32768 輸出一行,包含兩個正整數,第乙個是最少的動物數,第二個是最多的動...