zoj3726_2013长沙区域赛(二分查找+预处理)



///////////////////////////////////////////////////////////////////////////////////////////////////////

作者:tt2767

声明:本文遵循以下协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0

查看本文更新与讨论请点击:http://blog.csdn.net/tt2767

链接被删请百度: CSDN tt2767

///////////////////////////////////////////////////////////////////////////////////////////////////////



题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3726

解释在注释中:


#include<sstream>
#include<string>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include <iterator>
#include<vector>
#include<map>
#include <stack>
#include<queue>
#include<set>
#include <list>
#include<functional>
#include<numeric>
using namespace std;
#define mem(x) memset(x,0,sizeof(x))
inline int lowbit(int x){ return x&(-x);}
typedef  long long int LL;
const int INF = 0x3f3f3f3f ;
const long double PI = acos(0.0) * 2.0;
const int N = 100009;
LL s[N],p[N],v[N];
LL miny;
int main()
{
    int Case,ans;
    scanf("%d",&Case);
    while(Case--)
    {
        mem(s),mem(p),mem(v);
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i = 0 ; i < n ; i++)
        {
            scanf("%lld%lld",&s[i],&p[i]);
            v[i] = s[i] * p[i];
        }
        miny = v[n-1];          //预处理求出p增长时最小的售价
        for(int i = n-2 ; i >=0 ; i--)
            v[i] = (v[i] < miny)? (miny = v[i]) : miny;

        for(int j = 0 ; j < m ; j++)
        {
            LL q,mark;
            scanf("%lld",&q);                             //s是有序的
            mark = upper_bound(s,s+n,q)-s;  //二分查找刚好比q所属区间

            if(mark == n)         //如果印的章数超出预计
                printf("%lld\n",q*p[n-1]);
            else
                printf("%lld\n",min(q*p[--mark],v[mark])); //原本售价应该在前一位
        }
    }
    return 0;
}

版权声明:本文为博主原创文章,允许非商业性转载,转载必须注名作者(CSDN tt2767)与本博客链接:http://blog.csdn.net/tt2767。

时间: 2024-12-21 06:11:21

zoj3726_2013长沙区域赛(二分查找+预处理)的相关文章

HDU 4791 Alice&#39;s Print Service(2013长沙区域赛现场赛A题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4791 解题报告:打印店提供打印纸张服务,需要收取费用,输入格式是s1 p1 s2 p2 s3 p3...表示打印区间s1到s2张纸的单价是p1,打印区间s2 到s3的单价是p2....最后是sn到无穷大的单价是pn,让你求打印k张纸的总费用最少是多少?有m次查询. 因为s1*p1 > s2 * p2 > s3*p3......,很显然,加入k所在的那个区间是第x个区间,那么最低费用要么是k * p

HDU 4793 Collision(2013长沙区域赛现场赛C题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4793 解题报告:在一个平面上有一个圆形medal,半径为Rm,圆心为(0,0),同时有一个圆形范围圆心也是(0,0),半径为R,R > Rm,现在向平面上投掷一枚硬币,硬币初始的圆心位置为(x,y),半径是r,给出硬币的速度向量,硬币碰到medal的时候会反射,注意,反射就是原路返回,并不是按照常理的按照圆心连线的路线,表示一直以为是这样,WA了很久,然后,让你求硬币跟圆形范围有交集的时候的总时间是

【组队训练】2013长沙区域赛

四题,铜靠前. 今天训练我一道题没写……被队友带飞的感觉真好Orz 换了队友果然输出变高了,虽然还是铜牌区,但至少看到了希望…… 由于早上起晚了- -# 到实验室的时候已经开始半个小时了,zr在做A题,TLE了,改了下……2A 我看了K题,魔方的题,一看就是搜索,不过我不是很会,就去问xl,他说可以写,不过需要仔细想想. 然后zr看J题,此时已经过了很多了. 我看了下没看懂题,zr说是斜率dp,我就没继续看,毕竟不懂斜率优化…… 写了挺久的……这段时间我在看D,打了个表,然后看是瞪数据…… 后来

CUGBACM_Summer_Tranning3 2013长沙现场赛(二分+bfs模拟+DP+几何)

A题:二分 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4791 用lower_bound可以轻松解决,不过比赛的时候逗逼了. 刚开始没有预处理,所以队友给出一组数据的时候没通过,然后一时紧张又想不出什么好的解决办法,所以就没再继续敲代码.实在有点可惜了. #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #includ

15北京区域赛——A 二分——hihoCoder 1249 Xiongnu&#39;s Land

两次二分,第一次取得最小值,第二次往右二分看是否能到更右边 注意超出部分land部分要去掉 #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; struct edge{ int x, y, w, h; }a[10010]; bool cmp(edge A, edge B) { return A.x < B.x; } int n; ll cal(int x) { ll

HDU 4791 Alice&#39;s Print Service (2013长沙现场赛,二分)

Alice's Print Service Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1855    Accepted Submission(s): 454 Problem Description Alice is providing print service, while the pricing doesn't seem to

HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第一种是行交换操作,就是把矩阵的两行进行交换,另一种是列交换操作,注意两种操作都要求行或列至少要有一个水果,第三种操作是查找,询问第A行B列的水果的能量值,如果查询的位置没有水果,则输出0. 因为n和m都很大,达到了2*10^9,但水果最多一共只有10^5个,我的做法是直接用结构体存了之后排序,然后m

2015亚洲区域赛长春赛区网络预选赛

第一次打网络赛,第一场,总体来说还可以吧,但是我们队三个人状态都并不太好,主要就是 WA 的比较多吧,开场看最后一题是我的习惯了,虽然貌似那题到打了一半可能才有队伍做出来了,我看了感觉像前几天训练赛的时候做的一道题.刻盘开场看 06 ,凯神开场 01.接着两分钟学长发现 07 水题我就跟着看了发题意,求区间最大值,静态.然后数据范围也很小,就直接开敲暴力,四分钟的时候过的,大概 20 名左右吧,那就是我们的最高名次了2333……接着我准备继续研究下 13 ,刻盘告诉我 06 是关于循环的子串的问

鞍山区域赛的总结+反思

玩acm大概也有半年了吧,大概是从大一下学期中后段的那一段时间开始接触acm的,暑假参加了集训之后,就开始了区域赛的网络赛的选拔,哎弱校没人权,最终组好的队伍也就那么四五队,弱校的acm氛围简直太差了,无法吸引很多的学生一起来玩耍,网络赛选拔的时候我们队是零贡献的,因为,有些师兄队要和我们共用一个账号,那些水题往往被他们很快先ac掉了,难题我们又做不了,只能让师兄们去做,多亏了他们,让scnu的每个区域赛都获得了现场赛的名额.哎 牡丹江凑不齐人数,结果最终只能放弃这个赛区了.两个字,弱校----