暑假-树状数组-A - 敌兵布阵

一道非常非常简单的树状数组入门题。 直接套模板的事。

然而我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;  
} 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值