一道非常非常简单的树状数组入门题。 直接套模板的事。
然而我TLE了3次,一直在原因。最后发现用一模一样的代码
C++的cin.cout会超时,而应C的scanf,print 只要265MS就过了。
有这么大差距么。。。。还是喜欢用C++的cin和cout。
/*
题意:中文题,见hdu 1166
思路:模板题,直接套模板。
*/
#include<iostream>
#include<stdio.h>
using namespace std;
const int MAXN=50005;
long long int c[MAXN];
int n,t,temp=0,value,a,b;
char com[10];
int lowbit(int x)
{
return x&(-x);
}
int sum(int i)
{
int ans=0;
while(i>0)
{
ans+=c[i];
i-=lowbit(i);
}
return ans;
}
void add(int i,int val)
{
while(i<=n)
{
c[i]+=val;
i+=lowbit(i);
}
}
int main()
{
cin>>t;
while(t--)
{
memset(c,0,sizeof(c));
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>value;
add(i,value);
}
cout<<"Case "<<++temp<<":"<<endl;
while(cin>>com)
{
if(com[0]=='E')
{
break;
}
cin>>a>>b;
if(com[0]=='Q')
{
cout<<sum(b)-sum(a-1)<<endl;
}
else if(com[0]=='A')
{
add(a,b);
}
else
{
add(a,-b);
}
}
}
return 0;
}