noiac64 sort (二分答案)
首先如果L=1,那就可以直接用一个优先队列来做
但它并不是1 所以要换个做法
假设我们已经知道第L的数是x,第R的数是y
那其实就只需要找到[x+1,y+1]这一段,然后再加上一定数量的x和y就是答案
于是可以枚举A[i],二分B[j]找到
然后考虑怎么找第L的数是多少
其实也是二分出一个数,然后比较L和小于它的个数
这个小于它的个数怎么算呢,还是二分......
复杂度$O(nlog^2n)$
#include<bits/stdc++.h>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=1e5+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} ll N,L,R,a[maxn],b[maxn],ans[maxn]; inline ll count(ll k){
ll re=;
for(int i=;i<=N;i++){
int l=,r=N,n=;
while(l<=r){
int m=l+r>>;
if(a[i]+b[m]<k) l=m+,n=m;
else r=m-;
}re+=n;
}return re;
} int main(){
ll i,j,k;
N=rd(),L=rd(),R=rd();
for(i=;i<=N;i++)
a[i]=rd();
for(i=;i<=N;i++)
b[i]=rd();
sort(a+,a+N+);sort(b+,b+N+);
ll l=a[]+b[],r=a[N]+b[N],nl,nr;
while(l<=r){
int m=l+r>>;
if(count(m)<L) l=m+,nl=m;
else r=m-;
}
l=a[]+b[],r=a[N]+b[N];
while(l<=r){
int m=l+r>>;
if(count(m)<R) l=m+,nr=m;
else r=m-;
}
k=;
for(i=;i<=N;i++){
int l=,r=N,x=N+,y=-;
while(l<=r){
int m=l+r>>;
if(a[i]+b[m]>nl) x=m,r=m-;
else l=m+;
}
l=,r=N;
while(l<=r){
int m=l+r>>;
if(a[i]+b[m]<nr) y=m,l=m+;
else r=m-;
}
for(j=x;j<=y;j++)
ans[++k]=a[i]+b[j];
}
sort(ans+,ans+k+);
for(i=L;i<=min(R,count(nl+));i++)
printf("%lld ",nl);
j=i-;
for(;i<=k+j;i++)
printf("%lld ",ans[i-j]);
for(;i<=R;i++)
printf("%lld ",nr);
return ;
}
noiac64 sort (二分答案)的更多相关文章
- HDU 5884 Sort(二分答案+计算WPL的技巧)
Sort Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU - 5884 Sort (二分答案+贪心)
有n个数字,你需要把这n个数字合成一个数字,每次只能把k个数字合并成一个,花费为这k个数字的和. 给一个最大花费,问不超过这个最大花费的情况下,k的最小值. Sample Input 1 5 25 1 ...
- E. Santa Claus and Tangerines 二分答案 + 记忆化搜索
http://codeforces.com/contest/752/problem/E 首先有一个东西就是,如果我要检测5,那么14我们认为它能产生2个5. 14 = 7 + 7.但是按照平均分的话, ...
- 字符串hash + 二分答案 - 求最长公共子串 --- poj 2774
Long Long Message Problem's Link:http://poj.org/problem?id=2774 Mean: 求两个字符串的最长公共子串的长度. analyse: 前面在 ...
- HNOI2006-公路修建问题(二分答案+并查集)
公路修建问题 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织成立了,旨 ...
- POJ3294--Life Forms 后缀数组+二分答案 大于k个字符串的最长公共子串
Life Forms Time Limit: 500 ...
- POJ 3579 Median(二分答案+Two pointers)
[题目链接] http://poj.org/problem?id=3579 [题目大意] 给出一个数列,求两两差值绝对值的中位数. [题解] 因为如果直接计算中位数的话,数量过于庞大,难以有效计算, ...
- BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )
最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #inc ...
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式( 二分答案 + 后缀数组 )
二分答案m, 后缀数组求出height数组后分组来判断. ------------------------------------------------------------ #include&l ...
随机推荐
- Bridge (br0) Network on Linux
动手实践虚拟网络 - 每天5分钟玩转 OpenStack(10) - CloudMan - 博客园https://www.cnblogs.com/CloudMan6/p/5296573.html li ...
- Spring.profile配合Jenkins发布War包,实现开发、测试和生产环境的按需切换
前两篇不错 Spring.profile实现开发.测试和生产环境的配置和切换 - Strugglion - 博客园https://www.cnblogs.com/strugglion/p/709102 ...
- Day 5-3 多态与多态性
多态与多态性 鸭子类型 多态与多态性 多态:一类事物有多种形态.比如,动物有多种形态,人,狗,猪,豹子.水也有多种形态,冰,雪,水蒸气. #多态:同一类事物的多种形态 import abc class ...
- MyBatis映射文件1(增删改、insert获取自增主键值)
增删改 Mybatis为我们提供了<insert>.<update>.<delete>标签来对应增删改操作 在接口中写增删改的抽象方法 void addEmp(Em ...
- js判断一个图片是否已经存在于缓存
如下代码: var url = "http://......../image.jpg"; var img = new Image(); img.src = url; if(im ...
- centos6.8安装JDK
1.检测当前系统安装jdk信息 rpm -qa | grep jdk 2.如果检查到有安装信息,则用sudo yum remove XXX(XXX代表上面查到的结果) 3.下载rpm包,安 ...
- C#通过Socket读取大量数据
在C#中经常会用到Socket去接收和发送数据,而且也是非常方便的,有时候我们会向服务端去请求数据,如果返回的数据量很大,比如超过10M甚至是更多,那么该怎样去接收数据呢?下面以一个在项目中用到的实例 ...
- python数学第七天【期望的性质】
- todo项目总结
vue+webpack项目工程配置 1.vue-loader+webpack项目配置 2.webpack配置项目加载各种静态资源 3.webpack-dev-server的配置和使用 安装: pack ...
- vscode git設置
1.git官网https://git-scm.com/download/win 链接下载:64-bit Git for Windows Setup,不要下载Portable,体积太大了: 如果git官 ...