| ||||||||||
| 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 | |||||||||
这个为什么会W呢···这代码哪儿错了#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const long long M = 500010;
long long a[M]={0};
long long n;
struct tree{
long long l,r,m;
long long sum,mark;
};
//typedef tree tree;
tree tr[M*4];
void build_tree(long long l,long long r,long long num)
{
tr[num].l=l;
tr[num].r=r;
tr[num].m=(l+r)/2;
tr[num].mark=0;
if(l==r)
{
tr[num].sum=a[l];
return ;
}
build_tree(l,tr[num].m,num<<1);
build_tree(tr[num].m+1,r,(num<<1)+1);
tr[num].sum = tr[num<<1].sum+tr[(num<<1)+1].sum;
}
void update_tree(long long l,long long r,long long num,long long ad)
{
if(tr[num].l==l&&tr[num].r==r)
{
tr[num].mark+=ad;
return;
}
tr[num].sum +=(ad*(r-l+1));
if(tr[num].m>=r)
update_tree(l,r,num<<1,ad);
else if(tr[num].m<l)
update_tree(l,r,(num<<1)+1,ad);
else
{
update_tree(l,tr[num].m,num<<1,ad);
update_tree(tr[num].m+1,r,(num<<1)+1,ad);
}
}
long long query_tree(long long l,long long r,long long num)
{
if(l==tr[num].l&&r==tr[num].r)
{
return tr[num].sum+(l-r+1)*tr[num].mark;
}
if(tr[num].mark!=0)
{
tr[num].sum+=(tr[num].r-tr[num].l+1)*tr[num].mark;
tr[num*2].mark=tr[num].mark;
tr[num*2+1].mark=tr[num].mark;
tr[num].mark=0;
}
if(tr[num].m>=r)
return query_tree(l,r,num*2);
else if(tr[num].m<l)
return query_tree(l,r,num*2+1);
else return query_tree(l,tr[num].m,num*2)+query_tree(tr[num].m+1,r,num*2+1);
}
int main()
{
long long m;
cin>>n>>m;
long long n1,n2,n3;
long long ans;
char c;
for(long long i=1;i<=n;i++)
cin>>a[i];
build_tree(1,n,1);
for(long long i=0;i<m;i++)
{
cin>>c;
if(c=='Q')
{
cin>>n1>>n2;
ans=query_tree(n1,n2,1);
cout<<ans<<endl;
}
else if (c=='C')
{
cin>>n1>>n2>>n3;
update_tree(n1,n2,1,n3);
}
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator