[计蒜客][结构体]抢气球升级版 原创

题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛)

算法标签 结构体

题目描述

在这里插入图片描述

思路

抢气球的区别在于数据量从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;
}
posted @ 2022-02-23 17:10  俺叫西西弗斯  阅读(0)  评论(0)    收藏  举报  来源