题目描述





分析

首先,容易发现一个小组内的最优配对方式(能得到最大综合实力的方式)

一定是实力值最大的男生和最大的女生配对,次大的和次大的配对,以此类推.

但是每次新插入一个值时,需要用 \(nlogn\) 的时间复杂度去维护这个最大实力值

如果暴力去扩展时间效率是无法接受的

然后我们会发现答案具有单调性,可以枚举一个左区间,然后二分查找右区间

但是当遇到每一组的人数很小的情况时,二分会被卡成 \(n^2 logn\)

因此我们需要先用倍增处理出二分的区间

在处理出的区间里进行二分查找

这样,当实际组大小是\(k\)时,时间复杂度应为\(O(klog^2k)\)

则总时间复杂度不超过\(O(nlog^2n)\)

代码

#include<cstdio>
#include<set>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
#define rg register
inline int read(){
rg int x=0,fh=1;
rg char ch=getchar();
while(ch<'0' || ch>'9'){
if(ch=='-') fh=-1;
ch=getchar();
}
while(ch>='0' && ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*fh;
}
const int maxn=5e5+5;
int n,a[maxn],b[maxn],cnt,c[maxn],d[maxn];
long long m;
bool jud(int l,int r){
rg long long nans=0;
rg int ncnt=0;
for(rg int i=l;i<=r;i++){
c[++ncnt]=a[i];
d[ncnt]=b[i];
}
std::sort(c+1,c+1+ncnt);
std::sort(d+1,d+1+ncnt);
for(rg int i=1;i<=ncnt;i++){
nans+=1LL*c[i]*d[i];
}
return nans<=m;
}
int main(){
n=read();
scanf("%lld",&m);
for(rg int i=1;i<=n;i++){
a[i]=read();
}
for(rg int i=1;i<=n;i++){
b[i]=read();
}
rg int head=1,now=0;
while(head<=n){
cnt++;
now=0;
while(1){
if(head+(1<<now)-1>n || !jud(head,head+(1<<now)-1)) break;
now++;
}
rg int nl=head+(1<<(now-1))-1,nr=head+(1<<(now))-1,nmids;
nr=std::min(n,nr);
while(nl<=nr){
nmids=(nl+nr)>>1;
if(jud(head,nmids)) nl=nmids+1;
else nr=nmids-1;
}
head=nr+1;
}
printf("%d\n",cnt);
return 0;
}

最新文章

  1. pyhon——进程线程、与协程基础概述
  2. NOIP 考前 KMP练习
  3. 图解CSS的padding,margin,border属性
  4. webdriver hangs when get or click
  5. The New Debugger
  6. Headfirst设计模式的C++实现——适配器(Adapter)
  7. OpenSessionInViewFilter与org.springframework.dao.InvalidDataAccessApiUsageException
  8. 几种C#实现播放声音的方法
  9. iTerm 使用expect实现自动远程登录,登录跳板机
  10. JQUERY 插件开发——LAZYLOADIMG(预加载和延迟加载图片)
  11. call, apply,bind 方法解析
  12. [转载] redis 的两种持久化方式及原理
  13. linux yum源配置及vim运用
  14. Fundebug累计处理1000万条错误事件!
  15. jdk各种包安装方式
  16. ASP.NET Identity 二 (转载)
  17. Android 4.0之后的日历控件拥挤的解决办法
  18. PM_LOG
  19. Qt封装QTcpServer参考资料--QT自带QTcpServer架构分析
  20. SSH框架环境搭建问题:Line: 230 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:230:-1

热门文章

  1. 1.4Hadoop伪分布式安装
  2. ES6 常用总结——第三章(数组、函数、对象的扩展)
  3. 项目里出现两个配置类继承WebMvcConfigurationSupport时,为什么只有一个会生效(源码分析)
  4. Django-发送注册、忘记密码邮件验证-send_mail
  5. PHP代码审计02之filter_var()函数缺陷
  6. spark-2-RDD
  7. GAN的理论 Theory behind GAN
  8. Spring Cloud系列(四):Eureka源码解析之客户端
  9. unsigned int 和 int
  10. 《穷查理年鉴》金钱 &amp; 生意 &amp; 律师(关于金钱)