HDU-4791-Alice‘s Print Service
2024-08-28 03:21:03
分析:
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 ;
}
最新文章
- ubuntu14 备份
- getline数据来源你的三种方式
- Android Menu 主菜单是使用
- Android权限安全(2)给基本组件自定义权限(以activity为例)
- Java中this、super用法
- windows桌面添加右键环境
- [Linux]Vim的安装及使用
- Systemtap kernel.trace(";*";) events source code
- 【HDOJ】1329 Hanoi Tower Troubles Again!
- javascript 中字符串之比较
- 【C#】Switch datatype between object and byte[]
- 常见的 http 状态码
- PHP的几个常用加密函数【转载】
- dos命令的小总结
- powershell_基础篇
- c++——大端序,小端序的排列问题
- Python爬虫 获得淘宝商品评论
- IDEA将web项目打成war包
- Java7/8 HashMap ConcurrentHashMap
- iOS编程(双语版) - 视图 - 基本概念