当前位置:编程学习 > C/C++ >>

hdu1166 树状数组

 
不知道为什么用C++输入输出死活不过,换成C的就过了。。。 
#include <stdio.h>  
#include <string.h>  
 
//==============================  
#define maxn 50020  
 
int c[maxn]; 
int a[maxn]; 
int n; 
int t; 
 
int lowbit(int x) 
{ 
    return x&(-x); 
} 
 
int Sum(int n) 
{ 
    int sum = 0; 
    while(n>0) 
    { 
        sum += c[n]; 
        n = n - lowbit(n); 
    } 
    return sum; 
} 
 
void update(int i,int x) 
{ 
    while(i <= n) 
    { 
        c[i] = c[i] + x; 
        i = i + lowbit(i); 
    } 
} 
 
int GetSum(int x1,int x2) 
{ 
    return Sum(x2) - Sum(x1-1); 
} 
 
//===================================  
int main() 
{ 
    scanf("%d",&t); 
    int count = 0; 
    while(t--) 
    { 
        count++; 
        memset(a,0,sizeof(a)); 
        memset(c,0,sizeof(c)); 
        scanf("%d",&n); 
        for(int i = 1; i <= n; i++) 
        { 
            scanf("%d",&a[i]); 
            update(i,a[i]); 
        } 
        //cout<<"case "<<count<<":"<<endl;  
        printf("Case %d:\n",count); 
        char oper[11]; 
        int i,j; 
        while(scanf("%s",oper)==1) 
        { 
            if(strcmp(oper,"End")==0) 
                break; 
            scanf("%d%d",&i,&j); 
            if(strcmp(oper,"Query")==0) 
            { 
                printf("%d\n",GetSum(i,j)); 
            } 
            if(strcmp(oper,"Add")==0) 
            { 
                a[i] += j; 
                update(i,j); 
            } 
            if(strcmp(oper,"Sub")==0) 
            { 
                a[i] -= j; 
                update(i,-j); 
            } 
        } 
    } 
    return 0; 
} 

 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,