分析:

1.由于价格是递减的,所以可能出现si*pi>sj*pj(j>i)。所以要有一个数组来储存当前端点的最小值。

2.然后二分查找当前的si,比较q*p[i]和M[i+1].不过在这之前要确认i是小于n的。】

3.upper_bound是返回第一个大于当前值得坐标,否则返回左闭右开的右端点。而lower_bound是返回第一个大于等于当前值得坐标。所以这里采用upper_bound。

 #include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
using namespace std;
#define M 100010
#define ll long long
ll s[M],p[M],q[M];
ll n,m;
ll best[M];
int main()
{
int T;
scanf("%d",&T);
for(int i=;i<T;i++)
{ scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%lld%lld",&s[i],&p[i]);
}
ll Min = s[n]*p[n];
best[n] = Min;
for(int i =n-;i>=;i--)
{
Min = min(Min,s[i]*p[i]);
best[i] = Min;
}
for(int i=;i<=m;i++)
{
scanf("%lld",&q[i]);
}
for(int i=;i<=m;i++)
{
if(q[i]>=s[n])
{
printf("%lld\n",q[i]*p[n]);
continue;
}
int t = upper_bound(s+,s++n,q[i])-s-;
printf("%lld\n",min(best[t+],q[i]*p[t]));
}
}
return ;
}

最新文章

  1. ubuntu14 备份
  2. getline数据来源你的三种方式
  3. Android Menu 主菜单是使用
  4. Android权限安全(2)给基本组件自定义权限(以activity为例)
  5. Java中this、super用法
  6. windows桌面添加右键环境
  7. [Linux]Vim的安装及使用
  8. Systemtap kernel.trace(&quot;*&quot;) events source code
  9. 【HDOJ】1329 Hanoi Tower Troubles Again!
  10. javascript 中字符串之比较
  11. 【C#】Switch datatype between object and byte[]
  12. 常见的 http 状态码
  13. PHP的几个常用加密函数【转载】
  14. dos命令的小总结
  15. powershell_基础篇
  16. c++——大端序,小端序的排列问题
  17. Python爬虫 获得淘宝商品评论
  18. IDEA将web项目打成war包
  19. Java7/8 HashMap ConcurrentHashMap
  20. iOS编程(双语版) - 视图 - 基本概念

热门文章

  1. Codeforces - 814B - An express train to reveries - 构造
  2. vector中插入pair
  3. POJ2105【进制转化】
  4. CodeForces 615C
  5. hdoj1116【欧拉回路】
  6. Unity Transform常识(转)
  7. 11.5NOIP模拟赛
  8. hdu 5409 CRB and Graph(边双联通分量)
  9. Poj 3666 Making the Grade (排序+dp)
  10. 学习JavaScript数据结构与算法 (一)