树状数组的应用(SOJ2559)
来源:互联网 发布:手机 js保存图片 编辑:程序博客网 时间:2024/05/22 18:23
(2012-07-23 14:04:18)
SOJ2559:http://cstest.scu.edu.cn/soj/problem.action?id=2559
这道题是说对于给定的一个数组s求s[i]在前i个元素中的排名(从大到小)。
其实很简单,对于s[i]只需找出前i个元素中
题中的数据量为45000,对于每个元素的值没有具体的要求,只是为int型。
首先对数组s进行归一化(我自己的命名,很多人说是离散化,我觉得归一化更为恰当)处理,将数组中的元素值映射到1-45000上。
代码:
#include<iostream>#include<algorithm>#include<cstring>using namespace std;struct node{ int num; int rank;}s[45005];int t[45005];int c[45005];int result[45005];int n;/////////////////////////////int lowbit(int x){ return x&(x^(x-1));}void mod(int i){ while(i<=n) { c[i]++; i+=lowbit(i); }}int sum(int i){ int SUM=0; while(i) { SUM+=c[i]; i-=lowbit(i); } return SUM;}bool cmp(node a,node b){ return a.num<b.num;}int main(){ int i; while(scanf("%d",&n)==1) { memset(c,0,sizeof(c)); for(i=1;i<=n;i++) { scanf("%d",&s[i].num); s[i].rank=i; } sort(s+1,s+n+1,cmp); for(i=1;i<=n;i++) t[s[i].rank]=i; for(i=1;i<=n;i++) { result[i]=i-sum(t[i]); mod(t[i]); } for(i=1;i<=n;i++) printf("%d\n",result[i]); } return 0;}
0 0
- 树状数组的应用(SOJ2559)
- 树状数组的应用
- 树状数组的应用
- 树状数组的应用(SOJ2497)
- 树状数组的应用(SOJ2728)
- hdu 5147 (树状数组的应用)
- poj2481-树状数组的应用
- HDU3874树状数组的应用
- 树状数组的应用系列
- 树状数组的应用(区间修改,区间查询,多维树状数组)
- pku2352——Stars(经典树状数组的应用)
- uva 1428 - Ping pong (树状数组的应用)
- hdu 3874 Necklace(树状数组的灵活应用)
- 树状数组的简单应用(求逆序对个数)
- 树状数组的应用(区间修改+区间查询)
- 树状数组的简单应用(夏夜砍树)
- HDU3874 树状数组的灵活应用
- POJ2352——树状数组的应用
- hdu 2181 哈密顿绕行世界问题 (水dfs =。=)
- itoa与sprintf
- Oc 基础知识。
- jsp单击按钮没反应
- Java 8简明教程
- 树状数组的应用(SOJ2559)
- Access vba动态创建ActiveX控件
- c语言贪吃蛇的源码,用'A''S''D''W'操作
- 《深入浅出数据分析》资源汇总
- linux expect
- Xess SDRAM conctrller
- php怎么连接access数据库
- 养山羊必须要注意的地方
- android调用第三方库——第四篇——调用多个第三方库