POJ2750 最大連續和

2021-07-29 20:10:02 字數 1438 閱讀 1121

給出乙個含有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 輸出一行,包含兩個正整數,第乙個是最少的動物數,第二個是最多的動...