I can't understanding the problem's meaning.
The student's number of people is not from 1 to n.
Have multiply datas.
The portal:http://acm.hdu.edu.cn/showproblem.php?pid=3743
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
const int M = 1000005;
struct Node{
int value,r;
}a[M];
int Bit[M << 1] ;
void Insert(int x,int value) {
for(int i = x ; i < M ; i += i & (-i)) {
Bit[i] += value;
}
}
int Query(int x){
int ret = 0;
for(int i = x ; i ; i -= i & (-i)) {
ret += Bit[i];
}
return ret;
}
bool cmp(Node a1,Node a2){
return (a1.value - a2.value) < 0;
}
void print(){
for(int i=0 ; i<10 ; i++) {
printf("%d %d\n",a[i].r,a[i].value);
}
}
void Deal_with(){
int n,tempx;
while(~scanf("%d",&n)) {
memset(Bit,0,sizeof(Bit));
memset(a,0,sizeof(a));
long long cnt = 0;
for(int i = 0 ; i < n ; i ++ ) {
scanf("%d",&a[i].value);
a[i].r = i + 1;
}
sort(a,a+n,cmp);
//print();
for(int i = 0 ; i < n ; i ++ ) {
cnt += i - Query(a[i].r);
Insert(a[i].r,1);
}
printf("%lld\n",cnt);
}
}
int main(void){
//freopen("a.in","r",stdin);
Deal_with();
return 0;
}