Timus 1090 树状数组

第一道树状数组,每个第一道都那么艰难……..

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 1234567890
int res[10010],data[10010];
int lowbite(int x)
{
    return x & (x^(x-1));
}
int GetSum(int i)
{
    int t=0;
    while(i>0)
    {
        t+=res[i];
        i-=lowbite(i);
    }
    return t;
}
int Add(int i,int n)
{
    while(i<=n)
    {
        res[i]++;
        i+=lowbite(i);
    }
    return 0;
}
int main()
{
    int i,j,m,n,max,k,sum;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        max=-1;
        for(i=0;i<m;i++)
        {
            memset(res,0,sizeof(res));
            for(j=1;j<=n;j++) scanf("%d",&data[j]);
            sum=0;
            for(j=1;j<=n;j++)
            {
                sum+=j-GetSum(data[j]-1)-1;
                Add(data[j],n);
            }
            if(sum > max) {max=sum; k=i+1;}
        }
        printf("%d\n",k);
    }
    return 0;
}
posted @ 2012-05-01 22:08  书山有路,学海无涯  阅读(163)  评论(0编辑  收藏  举报