[计蒜客][结构体]抢气球升级版 原创
题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛)
算法标签 结构体
题目描述

思路
与抢气球的区别在于数据量从1e3到1e5,nXm直接到了10次方
这里使用双指针算法压速
我们找到特点,对于气球来说,只要被拿去,就不用再进行对比
根据这条逻辑我们得到
for(int i=0;i<n;i++)
while(j<m&&a[i].h>=q[j])ans[a[i].i]++,j++;//如果学生高度高于,则取走气球
使得时间压到n
AC代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+10;
struct stu{int i,h;}a[N];
int q[N];
int ans[N];
bool cmp(stu a,stu b){return a.h<b.h;}
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)cin>>a[i].h,a[i].i=i;
for(int i=0;i<m;i++)cin>>q[i];
sort(a,a+n,cmp),sort(q,q+m);
int j=0;
for(int i=0;i<n;i++)
while(j<m&&a[i].h>=q[j])ans[a[i].i]++,j++;
for(int i=0;i<n;i++)cout<<ans[i]<<endl;
return 0;
}

浙公网安备 33010602011771号