| ||||||||||
| 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 | |||||||||
WA了N次,问到底哪里错了(附代码)#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long a[100001];
struct node
{
long long sum,add;
}Tree[1100000];
int n,l,r,k;
long long dat;
char order;
void build(int x,int f,int t)
{
if (f==t){
Tree[x].sum=a[f];
return;
}
int mid=(f+t)/2;
build(x*2,f,mid);
build(x*2+1,mid+1,t);
Tree[x].sum = Tree[x*2].sum + Tree[x*2+1].sum;
}
long long sum(int x,int f,long long t)
{
if (f>=l && t<=r)
{
long long tmp = Tree[x].sum + (t-f+1) * Tree[x].add;
return tmp;
}
if (Tree[x].add!=0)
{
Tree[x].sum += (t-f+1) * Tree[x].add;
Tree[x*2].add += Tree[x].add;
Tree[x*2+1].add += Tree[x].add;
Tree[x].add = 0;
}
long long ans1=0;
int mid=(f+t)/2;
if (l<=mid) ans1+=sum(x*2,f,(f+t)/2);
if (r>=mid+1) ans1+=sum(x*2+1,(f+t)/2+1,t);
return ans1;
}
void changed(int x,int f,int t)
{
if (f>=l && t<=r)
{
Tree[x].add += dat;
return;
}
int mid=(f+t)/2;
if (l<=mid) changed(x*2,f,(f+t)/2);
if (r>=mid+1) changed(x*2+1,(f+t)/2+1,t);
Tree[x].sum = Tree[x*2].sum + Tree[x*2].add * ((f+t)/2 - f + 1);
Tree[x].sum += Tree[x*2+1].sum + Tree[x*2+1].add * (t - (f+t)/2);
}
int main(){
scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
build(1,1,n);
getchar();
for (int i=1;i<=k;i++)
{
scanf("%c",&order);
if (order=='Q')
{
scanf("%d%d",&l,&r);
printf("%I64d\n",sum(1,1,n));
}
else
{
scanf("%d%d%I64d",&l,&r,&dat);
changed(1,1,n);
}
getchar();
}
//system("pause");
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator