HDU 2689 Sort it [树状数组]【数据结构】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2689 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description Input Output Sample Input Sample Output Author Source ————————————————————————————-. 题目大意: 解题思路: 这里维护一个树状数组,每次把a[i]的值更新为1,这样的话查询的时候1~a[i]的和就是这个数出现之前比他大的数字的个数。 处理不难 。 附本题代码 #include <bits/stdc++.h>
#define abs(x) (((x)>0)?(x):-(x))
#define lalal puts("*********")
using namespace std;
/**************************************/
const int N = 1000+5;
#define lowbit(x) (x&-x)
int cnt,sum[N],a[N];
void update(int index,int val){
for(int i=index;i<=cnt;i+=lowbit(i))
sum[i]+=val;
return ;
}
int getSum(int index){
int ans = 0;
for(int i=index;i>0;i-=lowbit(i))
ans+=sum[i];
return ans;
}
int main(){
while(~scanf("%d",&cnt)){
memset(sum,0,sizeof(sum));
for(int i=1;i<=cnt;i++)
scanf("%d",&a[i]);
int ans=0;
for(int i=cnt;i;i--){
ans+=getSum(a[i]);
update(a[i],1);
}
printf("%dn",ans);
}
return 0;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |