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; }