noi.ac NOIP2018 全国热身赛 第四场 T2 sort

【题解】
跟51nod 1105差不多。
二分答案求出第L个数和第R个数,check的时候再套一个二分或者用two pointers.
最后枚举ai在b里面二分,找到所有范围内的数,排序后输出。
注意最后找到的数可能多于R-L+1,需要考虑这一点。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define LL long long
#define rg register
#define N 100010
using namespace std;
LL tot,n,l,r,st,ed,mn,mx,a[N],b[N],ans[N];
inline LL read(){
LL k=,f=; char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(''<=c&&c<='')k=k*+c-'',c=getchar();
return k*f;
}
inline LL check(LL x){
LL sum=;
for(rg int i=;i<=n;i++){
LL tmp=x-a[i]+;
sum+=lower_bound(b+,b++n,tmp)-b-;
// printf("sum=%d\n",sum);
}
// printf("sum=%d\n",sum);
return sum;
}
int main(){
n=read(); st=read(); ed=read();
for(rg int i=;i<=n;i++) a[i]=read(); sort(a+,a++n);
for(rg int i=;i<=n;i++) b[i]=read(); sort(b+,b++n);
l=a[]+b[]-; r=a[n]+b[n];
while(l+<r){
LL mid=(l+r)>>;
if(check(mid)>=st) r=mid; else l=mid;
}
mn=r;
l=a[]+b[]-; r=a[n]+b[n];
while(l+<r){
LL mid=(l+r)>>;
if(check(mid)>=ed) r=mid; else l=mid;
}
mx=r;
// printf("%d %d\n",mn,mx);
for(rg int i=;i<=n;i++){
int tmp=mn-a[i],tmp2=mx-a[i];
int pos1=lower_bound(b+,b++n,tmp)-b;
if(pos1==n+) continue;
int pos2=upper_bound(b+,b++n,tmp2)-b;
// printf("%d %d\n",pos1,pos2);
for(rg int j=pos1;j<pos2;j++) ans[++tot]=a[i]+b[j];
}
sort(ans+,ans++tot);
tot=min(tot,ed-st+);
for(rg int i=;i<=tot;i++) printf("%lld ",ans[i]);
return ;
}
noi.ac NOIP2018 全国热身赛 第四场 T2 sort的更多相关文章
- NOI.AC NOIP2018 全国热身赛 第四场
心路历程 预计得分:\(0 + 100 +100\) 实际得分:\(10 + 100 + 0\) 神TM T3模数为啥是\(1e9 + 9\)啊啊啊啊,而且我也确实是眼瞎...真是血的教训啊.. T2 ...
- noi.ac NOIP2018 全国热身赛 第四场 T1 tree
[题解] 考虑从小到大枚举边权,按顺序加边. 当前树被分成了若干个联通块,若各个块内的点只能跟块外的点匹配,那么最终的min g(i,pi)一定大于等于当前枚举的边. 判断各个联通块内的点是否全部能跟 ...
- noi.ac NOIP2018 全国热身赛 第二场 T3 color
[题解] 我们可以发现每次修改之后叶子结点到根的路径最多分为两段:一段白色或者黑色,上面接另一段灰色的.二分+倍增找到分界点,然后更新答案即可. check的时候只需要判断当前节点对应的叶子结点的区间 ...
- noi.ac NOIP2018 全国热身赛 第二场 T1 ball
[题解] 可以发现每次推的操作就是把序列中每个数变为下一个数,再打一个减一标记:而每次加球的操作就是把球的位置加上标记,再插入到合适的位置. 用set维护即可. #include<cstdio& ...
- NOI.AC NOIP模拟赛 第四场 补记
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...
- NOI.AC: NOIP2018 全国模拟赛习题练习
闲谈: 最后一个星期还是不浪了,做一下模拟赛(还是有点小虚) #30.candy 题目: 有一个人想买糖吃,有两家商店A,B,A商店中第i个糖果的愉悦度为Ai,B商店中第i个糖果的愉悦度为Bi 给出n ...
- NOIP2018 全国热身赛 第二场 (不开放)
NOIP2018 全国热身赛 第二场 (不开放) 题目链接:http://noi.ac/contest/26/problem/60 一道蛮有趣的题目. 然后比赛傻逼了. 即将做出来的时候去做别的题了. ...
- NOI.AC NOIP模拟赛 第五场 游记
NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
随机推荐
- UWP 页面跳转传值
如果涉及到页面跳转,一般用Frame这个控件来管理不同的页面. <Grid Name="RootGrid"> <Frame Name="RootFram ...
- Maximal Area Quadrilateral CodeForces - 340B || 三点坐标求三角形面积
Maximal Area Quadrilateral CodeForces - 340B 三点坐标求三角形面积(可以带正负,表示向量/点的不同相对位置): http://www.cnblogs.com ...
- PHP常见的输出语句 echo()、print()、print_r()、var_dump()、pinrtf()之间的区别
echo().print().print_r().var_dump().pinrtf()之间的区别 1.print() :简单输出语句,可以输出字符串,变量.表达式等单项的值!(不能输出数组.对象等复 ...
- android draw9patch工具使用
1.作用 将图片制作android .9图片xxx.9.png xxx.9.jpg xxx.9.gif 这些图片在android上拉伸时,边角不变形,不影响效果. 2.工具位置 Android的S ...
- CGI和Servlet的比较
转载自:http://www.maxhis.info/java/cgi-vs-servlet/ 概括来说,CGI和Servlet可以完成相同的功能. CGI(Common Gateway Interf ...
- Apache Cordova
http://cordova.apache.org/ Apache Cordova is a platformfor building native mobile applications using ...
- CF385C Bear and Prime Numbers
思路: 需要对埃氏筛法的时间复杂度有正确的认识(O(nlog(log(n)))),我都以为肯定超时了,结果能过. 实现: #include <bits/stdc++.h> using na ...
- obj.style 和currentstyle 等区别
版权声明:本文为博主原创文章,未经博主允许不得转载. 获取样式 obj.style 和currentstyle 等区别 obj.style只能获得内嵌样式(inline Style)就是写 ...
- MSComDlg.CommonDialog服务器不能创建对象错误的解决
作者:朱金灿 来源:http://blog.csdn.net/clever101 在JavaScript中弹出打开文件对话框,代码如下: var fileOpenDlg = new ActiveXOb ...
- cordova应用使用手机调试
对于cordova应用的调试,最方便调试方式还是作为h5应用在浏览器来调试,调试好了再打包cordova应用和打包apk.然而h5应用时的效果跟最终在安卓手机运行还有少数情况会不一样,因此,也需要有能 ...