国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

SPOJ GSS1 - Can you answer these queries I(線段樹維護GSS)

2019-11-14 13:08:58
字體:
來源:轉載
供稿:網友

Can you answer these queries I SPOJ - GSS1 You are given a sequence A[1], A[2], …, A[N] . ( |A[i]| ≤ 15007 , 1 ≤ N ≤ 50000 ). A query is defined as follows: Query(x,y) = Max { a[i]+a[i+1]+…+a[j] ; x ≤ i ≤ j ≤ y }. Given M queries, your PRogram must output the results of these queries. Input The first line of the input file contains the integer N. In the second line, N numbers follow. The third line contains the integer M. M lines follow, where line i contains 2 numbers xi and yi. Output Your program should output the results of the M queries, one query per line. Example Input: 3 -1 2 3 1 1 2 Output: 2

/*一開始W.不知道為啥.拍了好多組數據都OK.原來case更新的時候錯了.考慮三種情況.分別維護GSS,LGSS,RGSS.分為兩種形態:跨區間和不跨區間. case 1,2:左右段的GSS.case 3:左段右端與右段左端的GSS和.一開始更新的時候更新成了該段的左端GSS 右端GSS case3.畫了畫圖不對吖.如果跨區間的話這兩種情況是包含在case3里邊的.然后這樣就忽略了case1,2. */#include<iostream>#include<cstdio>#define MAXN 50001using namespace std;int n,m,cut;struct data{ int l,r,lg,rg,g,sum,size; data *lc,*rc;}tree[MAXN*4];int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar(); return x*f;}void build(data *k,int l,int r,int now){ k->l=l,k->r=r; if(l==r) {k->g=k->lg=k->rg=k->sum=read();return ;} int mid=(l+r)>>1; k->size=now; k->lc=&tree[now*2]; k->rc=&tree[now*2+1]; k->lc->size=now*2; k->rc->size=now*2+1; build(k->lc,l,mid,now*2); build(k->rc,mid+1,r,now*2+1); k->lg=max(k->lc->lg,k->lc->sum+k->rc->lg); k->rg=max(k->rc->rg,k->rc->sum+k->lc->rg); k->sum=k->lc->sum+k->rc->sum; k->g=max(k->lc->g,max(k->lc->rg+k->rc->lg,k->rc->g)); return ;}data query(data *k,int l,int r,int num){ data xx; if(l<=k->l&&k->r<=r) return tree[num]; int mid=(k->l+k->r)>>1; if(l>mid) return query(k->rc,l,r,k->rc->size); else if(r<=mid) return query(k->lc,l,r,k->lc->size); else { data ll=query(k->lc,l,mid,k->lc->size); data rr=query(k->rc,mid+1,r,k->rc->size); xx.sum=ll.sum+rr.sum; xx.lg=max(ll.lg,ll.sum+rr.lg); xx.rg=max(rr.rg,rr.sum+ll.rg); xx.g=max(ll.g,max(rr.g,ll.rg+rr.lg)); } return xx;}int main(){ //freopen("1.in","r",stdin); //freopen("1.out","w",stdout); int x,y; n=read(); build(tree+1,1,n,1); m=read(); while(m--) { x=read(),y=read(); data xx=query(tree+1,x,y,1); printf("%d/n",xx.g); } return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴塘县| 宣城市| 桑日县| 綦江县| 乐清市| 玉树县| 天门市| 琼海市| 周口市| 盐亭县| 大理市| 奈曼旗| 翁牛特旗| 独山县| 怀集县| 芦溪县| 格尔木市| 宁津县| 乌兰县| 偏关县| 孝义市| 兰溪市| 东城区| 闻喜县| 子洲县| 镇沅| 青铜峡市| 东丽区| 井研县| 黑山县| 台南市| 拉萨市| 建阳市| 台北县| 将乐县| 红河县| 呼伦贝尔市| 洞头县| 社会| 喀什市| 安龙县|