Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么,我用最原始的思路做错了呢。记录原始的,更新区域的,把它们加起来,错了。#include<stdio.h> #define HH 1 struct st { long long l; long long r; long long color; long long sum; long long num; }f[100002*4]; long long date[100002],sum1; void build(long long l,long long r,long long n) { long long mid=(l+r)/2; f[n].l=l; f[n].r=r; f[n].color=0; f[n].num=0; if(l==r) { f[n].sum=date[l]; } else { build(l,mid,n*2); build(mid+1,r,n*2+1); f[n].sum=f[n*2].sum+f[n*2+1].sum; } } void update(long long l,long long r,long long num,long long n) { long long mid=(f[n].l+f[n].r)/2; if(f[n].l==l&&f[n].r==r) { f[n].color=0; f[n].num=num; return ; } if(f[n].color==0) { f[n].color=HH; f[n*2].num=f[n].num; f[n*2+1].num=f[n].num; f[n*2].color=0; f[n*2+1].color=0; } if(mid>=r) update(l,r,num,n*2); else if(mid<l) update(l,r,num,n*2+1); else { update(l,mid,num,n*2); update(mid+1,r,num,n*2+1); } } void getsum(long long l,long long r,long long n) { long long mid=(f[n].l+f[n].r)/2; if(f[n].l<=l&&f[n].r>=r&&f[n].color==0) { //printf("%d %d %d\n",l,r,f[n].num); sum1=sum1+(r-l+1)*f[n].num; } else if(mid>=r) getsum(l,r,n*2); else if(mid<l) getsum(l,r,n*2+1); else { getsum(l,mid,n*2); getsum(mid+1,r,n*2+1); } } long long getsum1(long long l,long long r,long long n) { long long mid=(f[n].l+f[n].r)/2; if(f[n].l==l&&f[n].r==r) return f[n].sum; else if(mid>=r) getsum1(l,r,n*2); else if(mid<l) getsum1(l,r,n*2+1); else { return getsum1(l,mid,n*2)+getsum1(mid+1,r,n*2+1); } } int main() { long long i,n,q,l,r,num; char c[4]; scanf("%lld%lld",&n,&q); { for(i=1;i<=n;i++) scanf("%lld",&date[i]); build(1,n,1); getchar(); for(i=1;i<=q;i++) { scanf("%s",c); if(c[0]=='Q') { sum1=0; scanf("%lld%lld",&l,&r); getsum(l,r,1); sum1=sum1+getsum1(l,r,1); printf("%lld\n",sum1); } else if(c[0]=='C') { scanf("%lld%lld%lld",&l,&r,&num); update(l,r,num,1); } } } return 0; } 求解释啊。 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator