Codeforces 600B Queries about less or equal elements 【离散化去重二分查找 + 树状数组】
来源:互联网 发布:极限挑战知乎话题 编辑:程序博客网 时间:2024/06/11 14:31
小于等于号写成小于号,WA了一次。犯二了。
题意:给定一个由n个元素组成的序列a[]和一个由m个元素组成的序列b[],对每一个b里面的元素b[i],你需要统计出在序列a[]里面有多少个元素小于或者等于它。
思路:先用map存每个元素的个数,然后离散化去重。对去重后序列的每个元素,累加前面元素的个数。最后对于序列b里面的每个元素b[i],二分查找ID(根据排序方案处理,偷懒用了lower_bound o(╯□╰)o),这里需要判断返回ID对应的元素是否小于或者等于b[i]。因为感觉树状数组用的比较方便,就用了它来维护信息。
AC代码:
#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <vector>#define INF 0x3f3f3f#define eps 1e-8#define MAXN (200000+10)#define MAXM (100000)#define Ri(a) scanf("%d", &a)#define Rl(a) scanf("%lld", &a)#define Rf(a) scanf("%lf", &a)#define Rs(a) scanf("%s", a)#define Pi(a) printf("%d\n", (a))#define Pf(a) printf("%.2lf\n", (a))#define Pl(a) printf("%lld\n", (a))#define Ps(a) printf("%s\n", (a))#define W(a) while(a--)#define CLR(a, b) memset(a, (b), sizeof(a))#define MOD 1000000007#define LL long long#define lson o<<1, l, mid#define rson o<<1|1, mid+1, r#define ll o<<1#define rr o<<1|1using namespace std;int a[MAXN], ans[MAXN];map<int, int> fp;int C[MAXN];int lowbit(int x){ return x & (-x);}void update(int x, int d, int n){ while(x <= n) { C[x] += d; x += lowbit(x); }}int sum(int x){ int s = 0; while(x > 0) { s += C[x]; x -= lowbit(x); } return s;}int main(){ int n, m; Ri(n); Ri(m); fp.clear(); for(int i = 1; i <= n; i++) Ri(a[i]), fp[a[i]]++; sort(a+1, a+n+1); int R = 2; for(int i = 2; i <= n; i++) if(a[i] != a[i-1]) a[R++] = a[i]; sort(a+1, a+R); CLR(C, 0); for(int i = 1; i < R; i++) update(i, fp[a[i]], R-1); for(int i = 0; i < m; i++) { int V; Ri(V); int ID = lower_bound(a+1, a+R-1, V) - a; if(a[ID] <= V) ans[i] = sum(ID); else ans[i] = sum(ID-1); } for(int i = 0; i < m; i++) { if(i) printf(" "); printf("%d", ans[i]); } printf("\n"); return 0;}
0 0
- Codeforces 600B Queries about less or equal elements 【离散化去重二分查找 + 树状数组】
- Codeforces-600B Queries about less or equal elements(二分)
- Codeforces 600B Queries about less or equal elements(二分查找)
- 【CodeForces 600B 】Queries about less or equal elements(二分查找)
- Educational Codeforces Round 2B. Queries about less or equal elements(二分查找)
- Codeforces 600B Queries about less or equal elements(二分、upper_bound()的应用)
- codeforces Queries about less or equal elements 二分
- codeforces B.Queries about less or equal elements
- Codeforces 600.B Queries about less or equal elements
- Educational Codeforces Round 2 B. Queries about less or equal elements (二分)
- Educational Codeforces Round 2 B.Queries about less or equal elements(排序&&二分)
- cordforces 600B Queries about less or equal elements
- 【Educational Codeforces Round 2B】【map or 二分查找】Queries about less or equal elements b[]中的每个数比a[]中多少数大
- Codeforces Educational Codeforces Round 2 B. Queries about less or equal elements
- codeforces_600B. Queries about less or equal elements(排序二分)
- Educational Codeforces Round 2 B. Queries about less or equal elements
- Queries about less or equal elements
- Educational Codeforces Round 2_B. Queries about less or equal elements
- Swift中如何在一行中定义多个变量
- android中如何给button加圆角
- CI支持AJAX分页
- 错误与“错误”
- Unity3D深入浅出 - 新版动画系统(Mecanim)
- Codeforces 600B Queries about less or equal elements 【离散化去重二分查找 + 树状数组】
- PostgreSQL SQL SELECT CASE WHEN
- 中小型网站架构分析及优化
- (解题报告)HDU2001---计算两点间的距离
- block
- iOS不同版本适配问题
- Putty的颜色
- 10种排序算法
- quartz集群搭建(整合spring)