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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

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

2019-11-14 12:37:54
字體:
供稿:網(wǎng)友

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.不知道為啥.拍了好多組數(shù)據(jù)都OK.原來case更新的時(shí)候錯(cuò)了.考慮三種情況.分別維護(hù)GSS,LGSS,RGSS.分為兩種形態(tài):跨區(qū)間和不跨區(qū)間. case 1,2:左右段的GSS.case 3:左段右端與右段左端的GSS和.一開始更新的時(shí)候更新成了該段的左端GSS 右端GSS case3.畫了畫圖不對吖.如果跨區(qū)間的話這兩種情況是包含在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;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 金寨县| 浪卡子县| 增城市| 蚌埠市| 防城港市| 日照市| 大余县| 阿巴嘎旗| 罗山县| 桓仁| 上饶市| 壤塘县| 客服| 武陟县| 嘉鱼县| 双鸭山市| 潮安县| 海南省| 昌图县| 扶风县| 叙永县| 晋宁县| 高州市| 余姚市| 安塞县| 新乐市| 西峡县| 堆龙德庆县| 临澧县| 开化县| 金乡县| 阿瓦提县| 浦东新区| 红桥区| 新宾| 盐源县| 邵阳市| 荔波县| 沧源| 丽水市| 五河县|