【題目鏈結】
給n個數(含負數)
連續區間和大於0,區間長度最大
【題解】
預處理字首和並插入到線段樹里維護最大值。列舉字首和,然後在當前 字首和 位置i到n範圍上找離i位置最遠且大於 當前字首和 的字首和。怎麼找最遠呢?線段樹上優先查詢右兒子的區間就可以實現了。
【**】
/*¼ò»¯°æ*/
#include#define rep(i,a,b) for(int i=a;i<=(b);++i)
#define mem(a,x) memset(a,x,sizeof(a))
#define pb push_back
using namespace std;
typedef long long ll;
const int n=2e6+10;
const ll mod=1e9+7;
int sum[n],s[n*4];
int n;
void up(int id,int l,int r,int pos)
int mid=l+r>>1;
if(pos<=mid) up(id<<1,l,mid,pos);
else up(id<<1|1,mid+1,r,pos);
s[id]=max(s[id<<1],s[id<<1|1]);
}int qu(int id,int l,int r,int val)
int ans=0;
int mid=l+r>>1;
if(s[id<<1|1]>val) return qu(id<<1|1,mid+1,r,val);
if(s[id<<1]>val)return qu(id<<1,l,mid,val);
return -1;
}int main()
for(int i=1;i<=n;++i)
int ans=0;
for(int i=0;i<=n;++i)
printf("%d\n",ans);
}
【題目】
時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 262144k,其他語言524288k
64bit io format: %lld
水果店裡有 nn個水果排成一列。店長要求顧客只能買一段連續的水果。
小陽對每個水果都有乙個喜愛程度 aiai,最終的滿意度為他買到的水果的喜歡程度之和。
如果和為正(不管是正多少,只要大於 00 即可),他就滿意了。
小陽想知道在他滿意的條件下最多能買多少個水果。
你能幫幫他嗎?
第一行輸入乙個正整數 n,表示水果總數。第二行輸入 n 個整數 aiai,表示小陽對每個水果的喜愛程度。
一行乙個整數表示結果。(如果 1 個水果都買不了,請輸出 0)示例1
複製
5複製0 0 -7 -6 1
1
1≤n≤2×106,|ai|≤103
I Hate It(線段樹維護區間最大值)
題意 給定乙個原始陣列,有2種操作,第一種操作是單點修改id為a的學生的成績改為b,第二種操作是詢問區間a到b中分值最大的一位。思路 用線段樹維護區間最大值,每次修改之後不斷向上更新區間最大值即可。include using namespace std typedef long long ll co...
51nod 1376 線段樹維護區間最大值
引自 wonter巨巨的部落格 定義 dp i 以數字 i 不是下標 i 為結尾的最長上公升長度 然後用線段樹維護 dp i 每個節點維護 2 個資訊,乙個是當前區間的最大上公升長度,乙個是最大上公升長度的方案數,這裡再詳細說下這篇題解。也是弱弱自己的理解吧。以1 n的值為線段樹所代表的區間 然後依...
hdu I hate it 區間最大值 線段樹
include define maxn 200001 define lson l,mid,rt 1 define rson mid 1,r,rt 1 1 int max maxn 2 int n,m int max int a,int b void pushup int rt 要理解好更新的定義,不...