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 ...
随机推荐
- Azure系列2.1.2 —— BlobContainerProperties
(小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...
- js尾递归函数
普通递归: function fac(n) { if (n === 1) return 1; return n * fac(n - 1); } fac(5) // 120 这是个阶乘.但是占用内存,因 ...
- 解决小程序webview缓存机制
在打开webview的时候在地址后面加上随机数或者字符串 并且H5页面使用文件hash
- Python--文件、文件夹、压缩包、处理模块shutil
高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中 1 import shutil 2 3 shuti ...
- Spark 数据倾斜
Spark 数据倾斜解决方案 2017年03月29日 17:09:58 阅读数:382 现象 当你的应用程序发生以下情况时你该考虑下数据倾斜的问题了: 绝大多数task都可以愉快的执行,总 ...
- python爬虫scrapy的LinkExtractor
使用背景: 我们通常在爬去某个网站的时候都是爬去每个标签下的某些内容,往往一个网站的主页后面会包含很多物品或者信息的详细的内容,我们只提取某个大标签下的某些内容的话,会显的效率较低,大部分网站的都是按 ...
- python爬虫之Beautiful Soup的基本使用
1.简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索 ...
- DAY03、基本数据类型和运算符
一.基本数据类型的使用 1.整型int: 作用:用来记录年龄.等级.数量 定义:age=18 使用:数学运算与比较运算: 例:print(10>3) print(10/3) 2.浮点型float ...
- 集合之HashMap(含JDK1.8源码分析)
一.前言 之前的List,讲了ArrayList.LinkedList,反映的是两种思想: (1)ArrayList以数组形式实现,顺序插入.查找快,插入.删除较慢 (2)LinkedList以链表形 ...
- centOS 开机自启动自己的脚本
centOS 开机自启动自己的脚本 1. 自己脚本 myservice 如下: #!/bin/bash # chkconfig: # description: myservice .... echo ...