HDU 4791 Alice's Print Service(2013 Asia Changsha Regional Contest)

来源:互联网 发布:死神结局是什么 知乎 编辑:程序博客网 时间:2024/06/04 19:46

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4791

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<string>#include<algorithm>#include<queue>#include<stack>#include<vector>#include<set>#include<map>#include<list>#define mem(x,y)memset(x,y,sizeof(x))#define max(a,b)(a)>(b)?(a):(b)#define min(a,b)(a)<(b)?(a):(b)#define INF 0x1f1f1f1f#define M 10000007#define eps 1e-10using namespace std;typedef long long int LL;typedef __int64 ll;const int maxn=2005;LL a[100005];LL b[100005];LL c[100005];LL f[100005];int main(){    LL flag;    int T,n,m;    scanf("%d",&T);    while(T--)    {        memset(f,0,sizeof(f));        scanf("%d %d",&n,&m);        for(int i=1; i<=n; i++)            scanf("%I64d %I64d",&a[i],&b[i]);        for(int i=1; i<=m; i++)            scanf("%I64d",&c[i]);        f[n]=a[n]*b[n];        flag=f[n];        for(int i=n-1; i>=1; i--)        {            if(a[i]*b[i]<flag)            {                f[i]=a[i]*b[i];                flag=a[i]*b[i];            }            else                f[i]=flag;        }        for(int i=1; i<=m; i++)        {            if(c[i]==0)            {                printf("0\n");                continue;            }            if(c[i]<a[1])            {                printf("%I64d\n",f[1]);                continue;            }            if(c[i]>=a[n])            {                printf("%I64d\n",c[i]*b[n]);                continue;            }            int id=upper_bound(a+1,a+n+1,c[i])-a-1;            LL k=min(f[id+1],c[i]*b[id]);            printf("%I64d\n",k);        }    }    return 0;}
0 0