入门树状数组(左边比x小的个数)
来源:互联网 发布:使命召唤ol流畅优化 编辑:程序博客网 时间:2024/04/27 15:46
我们在这里求第i个数左边有几个比它小的数,还有右边有几个比它小的数。
那左边的这一种情况来说吧,在这里设置一个数组 C[]吧,先从a[i]向左扫描,让C[k]=1,表示大小为K 的值已经被扫描到了,所以他左边比它小的个数就C[1]+C[2]++++++C[a[i]-1],也就是是sum[a[i]]。然后向上更新点C[a[i]]++。
//左边比他小的数的 个数 //试下1 2 3 4 5 #if 0#include<iostream>#include<cstring>using namespace std;const int MAXX=10000;int a[MAXX];int c[MAXX];int S_L[MAXX];int S_R[MAXX];int max_a;int lowbit(int x){return x&(-x);}void add(int x,int v){for(; x<=max_a; x+=lowbit(x))c[x]+=v;}int sum(int x){int sum=0;for(; x>0; x-=lowbit(x)){sum+=c[x];}return sum;}int main(){int n; max_a=0;cin>>n;for(int i=1; i<=n; i++){cin>>a[i];max_a=max(max_a,a[i]);}for(int i=1; i<=n; i++){S_L[i]=sum(a[i]);add(a[i],1);}memset(c,0,sizeof(c)); //把数反过来 就是右边小的数的个数 for(int i=n; i>=1; i--){S_R[i]=sum(a[i]);add(a[i],1); }cout<<"the number of minner at left: "<<endl;for(int i=1; i<=n; i++)cout<<S_L[i]<<" ";cout<<endl;cout<<"the number of minner at right: "<<endl;for(int i=1; i<=n; i++)cout<<S_R[i]<<" ";cout<<endl;}#endif
阅读全文
0 0
- 入门树状数组(左边比x小的个数)
- 求任意区间里比x小的数的个数(树状数组)
- poj 2299 Ultra-QuickSort(利用树状数组变形,求一个数左边比它大的数的个数)
- 利用树状数组(对数组左侧比数组小的点的个数进行维护)
- hdu4417 树状数组(求指定区间比指定数小的数的个数)
- 二分法求数组中比X小的元素个数
- 考试题 树状数组查找以比x大的数作为中位数的个数+二分中位数
- 【树状数组 求比其小的个数】poj 2353 Stars
- 微软100题(93)找出数组中比左边的大比右边的小的元素
- 在数组中 找左边都比其小右边都比其大的元素
- 树状数组的简单应用(求逆序对个数)
- 每日一题(61) - 找出左边比它小,右边比它大的数
- hdu1166(树状数组入门)
- Ural1028(树状数组入门)
- 树状数组入门(转)
- 树状数组入门(求和)
- 美团2017校招(内推):计数:count(i)表示数组中第i 个元素后比其小的元素个数
- 小细节!!!!(二维树状数组的相关操作)
- Java接口中的成员变量为什么必须是public static final?
- HTML菜鸟入门1
- 字符串转换为整型
- Linux_shell条件判断if中的-a到-z的意思
- bzoj 2212 [Poi2011]Tree Rotations(线段树合并)
- 入门树状数组(左边比x小的个数)
- python学习(十)----matplotlib模块相关函数
- 17/8/18
- hdu3065
- Find the hotel(HDU-3193) (RMQ)
- 构造
- 一步一步学多线程-Timer
- HDU 6125 Free from square
- 文件解析漏洞总结-IIS