查询数组里有多少个数在[L,R]范围中(二分)
使用两次二分即可得到这个值
比如现在有一个vector<int> vec,里面存放的是有序数列。
我们现在希望找出范围在[L,R]之间的数有多少个。
则有cnt = upper_bound(vec.begin(),vec.end(),r) - lower_bound( vec.begin(),vec.end(),l)
这么多个。
比如这个题就可以用二分http://codeforces.com/problemset/problem/220/B
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL; int n,m;
vector<int> pos[];
const int MAX_N = 1e5+;
int cnt[MAX_N],a[MAX_N];
int vis[MAX_N],fc[]; int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=;i<=n;i++){
if( a[i]<= ){
cnt[a[i]]++;
}
} int now = ;
vector<int> num;
for(int i=;i<=;i++){
if( cnt[i]>=i ){
fc[now] = i;
vis[i] = now++;
num.push_back(i);
}
}
for(int i=;i<;i++) pos[i].push_back();
for(int i=;i<=n;i++){
if(a[i]>) continue;
int id = vis[a[i]];
if( id ){
pos[id].push_back(i);
}
}
// for(int i=1;i<=3;i++){
// printf("%d:",i);
// for(int j=0;j<pos[i].size();j++){
// printf(" %d",pos[i][j]);
// }
// puts("");
// }
// printf("now = %d\n",now);
typedef vector<int>::iterator pt;
while(m--){
int l,r;
scanf("%d%d",&l,&r);
// printf("l=%d,r=%d\n",l,r);
int ans = ;
for(int i=;i<now;i++){
int nnn = fc[i];
pt it1= upper_bound(pos[i].begin(),pos[i].end(),r);
pt it2= lower_bound(pos[i].begin(),pos[i].end(),l);
int cntt = it1-it2;
// printf("cntt=%d\n",cntt);
if( cntt==nnn ){
ans++;
}
}
printf("%d\n",ans);
} return ;
}
查询数组里有多少个数在[L,R]范围中(二分)的更多相关文章
- Help Hanzo lightof 1197 求一段区间内素数个数,[l,r] 在 [1,1e9] 范围内。r-l<=1e5; 采用和平常筛素数的方法。平移区间即可。
/** 题目:Help Hanzo lightof 1197 链接:https://vjudge.net/contest/154246#problem/M 题意:求一段区间内素数个数,[l,r] 在 ...
- Uva 3767 Dynamic len(set(a[L:R])) 树套树
Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...
- hdu 4630 查询[L,R]区间内任意两个数的最大公约数
No Pain No Game Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- D. Powerful array 离线+莫队算法 给定n个数,m次查询;每次查询[l,r]的权值; 权值计算方法:区间某个数x的个数cnt,那么贡献为cnt*cnt*x; 所有贡献和即为该区间的值;
D. Powerful array time limit per test seconds memory limit per test megabytes input standard input o ...
- 主席树——求区间[l,r]不同数字个数的模板(向左密集 D-query)
主席树的另一种用途,,(还有一种是求区间第k大,区间<=k的个数) 事实上:每个版本的主席树维护了每个值最后出现的位置 这种主席树不是以权值线段树为基础,而是以普通的线段树为下标的 /* 无修改 ...
- luogu P3834 【模板】可持久化线段树 1(主席树) 查询区间 [l, r] 内的第 k 小/大值
————————————————版权声明:本文为CSDN博主「ModestCoder_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https:// ...
- UPC 2224 Boring Counting (离线线段树,统计区间[l,r]之间大小在[A,B]中的数的个数)
题目链接:http://acm.upc.edu.cn/problem.php?id=2224 题意:给出n个数pi,和m个查询,每个查询给出l,r,a,b,让你求在区间l~r之间的pi的个数(A< ...
- CF 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和(数位DP)
题意: 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和 分析:考虑用状态压缩 , 10给位0~9 , 如果之前出现过了某个数字x ,那就拿当 ...
- 一组数字,从1到n,从中减少了3个数,顺序打乱,放在n-3的数组里,找出丢失数字
曾经看到有这样一个JS题:有一组数字,从1到n,从中减少了3个数,顺序也被打乱,放在一个n-3的数组里请找出丢失的数字,最好能有程序,最好算法比较快假设n=10000 下面我也来贴一个算法. func ...
随机推荐
- Redis应用场景(转)
(来源:http://www.cnblogs.com/shanyou/archive/2012/09/04/2670972.html) Redis常用数据类型 Redis最为常用的数据类型主要有以下五 ...
- python leetcode 日记 --Contains Duplicate II --219
题目: Given an array of integers and an integer k, find out whether there are two distinct indices i a ...
- 复制过来的东西也不靠谱,微信公众号第三方平台的API
API:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&veri ...
- RF Analyzer for Android 安卓平台连接HackRF的App
Over the last week I've been working on a new project, trying to build a spectrum analyzer for Andro ...
- C++ Daily 《1》----关于对象
1. 问题 请问如下的一个 class 的一个对象占了多少内存? 具体包含哪些东西? non-static 变量? static member 变量? member function?? virtua ...
- HTMl5-canvas 入门级复习
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- linux命令:find
1.命令介绍: find用来在整个系统指定的路径下搜索文件,功能强大,但是遍历整个系统时很耗时间. 2.命令格式: find 路径 [选项] [print -exec -ok...] 3.命令参数: ...
- C#中using关键字的作用及用法
using的用途和使用技巧. 1. 引用命名空间 2. 为命名空间或类型创建别名 3. 使用using语句 1. 引用命名空间,这样可以在程序中引用命名空间的类型而不必指定详细的命名空间. a ...
- fastcoloredtextbox 中文不重叠
DrawLineChars方法: private void DrawLineChars(PaintEventArgs e, int firstChar, int lastChar, int iLine ...
- linux,python 常用的处理log的命令
一般的log文件都是需要过滤 ps:管道符| 管道符前面的输出值 grep 过滤查找 将是error的log过滤显示 grep '221.2.100.138' web.access.log gr ...