标签:p475 int lowbit sum 元素 个数 update cin
题目:给定N个正整数 (N<10^5 每个元素< 10^5,对序列中的每个元素,求出左边比它小的元素个数。
分析: 求比它小的元素个数->区间和;数组大小可以开到10^5,所以不用离散化。
具体做法: 每输入一个元素,update(x, 1);左边比他小的:getsum(x-1);
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x & (-x))
const int N = 100000;
int c[N];
void update(int x, int v){
for (int i = x; i <= N; i += lowbit(i)){
c[i] += v;
}
}
int getsum(int x){
int sum = 0;
for (int i = x; i > 0; i -= lowbit(i)){
sum += c[i];
}
return sum;
}
int main(){
int n;
cin >> n;
int x;
while (n--) {
cin >> x;
update(x, 1); //单点更新
cout << getsum(x - 1) << endl; //区间查询
}
return 0;
}
输入:
5
2 5 1 3 4
输出:
0 1 0 2 3
标签:p475,int,lowbit,sum,元素,个数,update,cin 来源: https://blog.csdn.net/zhangjiaji111/article/details/118669163
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。