标签:
解题思路:
本题h的取值范围太大,所以无法直接开数组统计
1、 map统计
2、排序+二分
3、hash
4、优先队列
#include<cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define MAXN 1000010
using namespace std;
struct node{
int id;
int h;
}q[MAXN];
int ans[MAXN];
priority_queue<int,vector<int>,greater<int> > pq;
bool cmp(node a,node b){
if(a.h==b.h) return a.id<b.id;
return a.h<b.h;
}
int n,m;
int main(){
while(scanf("%d%d",&n,&m)==2){
while(!pq.empty()) pq.pop();
int tm;
for(int i=0;i<n;++i)
{
scanf("%d",&tm);
pq.push(tm);
}
for(int i=0;i<m;++i){
scanf("%d",&q[i].h);
q[i].id=i;
}
sort(q,q+m,cmp);
memset(ans,0,sizeof(ans));
for(int i=0;i<m;++i){
int tans=0;
while(!pq.empty()&&pq.top()<q[i].h) pq.pop();
while(!pq.empty()&&i<m&&pq.top()==q[i].h){
tans++;
pq.pop();
}
ans[q[i].id]=tans;
if(pq.empty())
break;
}
for(int i=0;i<m;++i)
printf("%d\n",ans[i]);
}
return 0;
}
收获:
map 数组 hash
共同点:一一对应的关系
不同点
1、map的key适用的数据类型比较广泛,而数组的key只能是int类型
2、map插入、查询相对数组来时间消耗大,map O(logN) 数组O(1)
3、数组相对于map来说消耗的空间大
hash相对于数组来说降低了空间消耗,但同时时间消耗又没有太大的影响
二分的思想。。。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/mengxingyuanlove/article/details/47211449