hdu1166 树状数组

2014-11-23 20:25:35 · 作者: · 浏览: 10
 
不知道为什么用C++输入输出死活不过,换成C的就过了。。。 
#include   
#include   
 
//==============================  
#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 "<