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;

}

你可能感兴趣的:(树状数组)