二分天数+验证

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; const int maxn=+;
int n,m,k;
long long s;
long long a[maxn],b[maxn],c[maxn];
int t[maxn];
long long A[maxn],B[maxn];
int preA[maxn],preB[maxn];
struct Tmp
{
int id;
long long val;
int day;
} tmp[maxn]; bool cmp(const Tmp&a,const Tmp&b)
{
return a.val<b.val;
} int main()
{
scanf("%d%d%d%lld",&n,&m,&k,&s);
for(int i=; i<=n; i++) scanf("%lld",&a[i]);
for(int i=; i<=n; i++) scanf("%lld",&b[i]);
for(int i=; i<=m; i++) scanf("%d%lld",&t[i],&c[i]); A[]=a[];
preA[]=;
for(int i=; i<=n; i++)
{
A[i]=min(A[i-],a[i]);
if(A[i-]<=a[i]) preA[i]=preA[i-];
else preA[i]=i;
} B[]=b[];
preB[]=;
for(int i=; i<=n; i++)
{
B[i]=min(B[i-],b[i]);
if(B[i-]<=b[i]) preB[i]=preB[i-];
else preB[i]=i;
} int l=,r=n;
int mid;
int ansDay=-;
while(l<=r)
{
mid=(l+r)/;
for(int i=; i<=m; i++)
{
tmp[i].id=i;
if(t[i]==) tmp[i].val=A[mid]*c[i];
else tmp[i].val=B[mid]*c[i];
}
sort(tmp+,tmp++m,cmp);
long long sum=;
for(int i=; i<=k; i++) sum=sum+tmp[i].val;
if(sum<=s)
{
ansDay=mid;
r=mid-;
}
else l=mid+;
}
printf("%d\n",ansDay);
if(ansDay!=-)
{
for(int i=; i<=m; i++)
{
tmp[i].id=i;
if(t[i]==) tmp[i].val=A[mid]*c[i];
else tmp[i].val=B[mid]*c[i]; if(t[i]==) tmp[i].day=preA[ansDay];
else tmp[i].day=preB[ansDay];
}
sort(tmp+,tmp++m,cmp);
for(int i=; i<=k; i++)
printf("%d %d\n",tmp[i].id,tmp[i].day);
}
return ;
}

最新文章

  1. Linux系统实战项目——sudo日志审计
  2. AOPR软件最小化消失了
  3. 阐述ArrayList、Vector、LinkedList的存储性能和特性。
  4. 【转载】Ansys中的阻尼
  5. Hive 的分桶 &amp; Parquet 概念
  6. PAT (Basic Level) Practise:1026. 程序运行时间
  7. Ajax请求在IE和Google Chrome中可以响应,在Firefox中无法响应
  8. jquery ajax事件
  9. find a filename from a filehandle in Perl
  10. 多项式逼近remes算法
  11. 【Hibernate】--实体状体与主键生成策略
  12. node初始
  13. Android使用AIDL跨进程通信
  14. git 的安装及使用
  15. oracle 11.2.0.1 rman异机恢复 11.2.0.3(windows X64)
  16. Python - 3MySQL 数据库连接
  17. sql查询两条记录的时间差
  18. JS (function (window, document, undefined) {})(window, document)的真正含义
  19. java学习笔记—Tomcat(9)
  20. CodeForces 803D Magazine Ad

热门文章

  1. 二分 Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) D
  2. 移植Iperf到android 用来学习linux移植到安卓的例子
  3. MySql 插入10位以上长度的字符报错or截断
  4. 巧妙利用ToArray()函数移除集合中的元素
  5. OpenGL-------状态机
  6. 使用Core Animation对象来实现动画
  7. linux command----vi
  8. 初识Jmeter(一)
  9. HttpURLConnection请求网络数据的GET请求
  10. svn 设置文件可执行权限