FZU2077——暴力技巧——The tallest tree

lzs种了n棵树,每棵树每天长高一定的高度。某一天,lzs想知道树长得怎么样了,你能求出那一天最高的树有多高吗?

Input

有多组测试数据,每组数据第一行输入两个整数n,m(1<=n,m<=100000),接下来n行,每行两个整数a,b(0<=a,b<=100000),表示第i棵树在第0天的高度以及每天生长的高度。接下来m行,每行一个整数x(0<=x<=100000),表示询问第x天最高的树有多高。

Output

对于每个询问输出一行,为当天最高的树的高度。

Sample Input

1 3 10 4 1 2 3

Sample Output

14 18 22

/*
先根据v进行从大到小排序,使得如果一旦高度达到,就只要判断前面的几个
离线对b根据day进行排序,每次更新index,处理完之后返回原来的序号
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int MAX = 100000 + 10;
struct edge{
    int h, v;
}a[MAX];

struct edge1{
    int d, h, id;
}b[MAX];
bool cmp(edge i, edge j)
{
    if(i.v == j.v) return i.h > j.h;
    return i.v > j.v;
}

bool cmp1(edge1 i, edge1 j)
{
    return i.d < j.d;
}

bool cmp2(edge1 i, edge1 j)
{
    return i.id < j.id;
}
int main()
{
    int n, m;
    while(~scanf("%d%d", &n, &m)){
        for(int i = 1; i <= n ;i++){
            scanf("%d%d", &a[i].h, &a[i].v);
        }
        sort(a + 1, a + n + 1, cmp);
        for(int i = 1; i <= m ;i++){
            scanf("%d", &b[i].d);
            b[i].id = i;
        }
        sort(b + 1, b + m + 1, cmp1);
        int max1 = 0, index = 0;
        for(int i = 1; i <= n ;i++){
            if(a[i].h >= max1){
                max1 = a[i].h;
                index = i;
            }
        }
        int day = index;
        for(int i = 1; i <= m ;i++){
            for(int j = 1; j <= day; j++){
                int temp = b[i].d * a[j].v + a[j].h ;
                if(temp >= max1){
                    index = j;
                    max1 = temp;
                }
            }
            day = index;
            b[i].h = max1;
        }
        sort(b + 1, b + m + 1, cmp2);
        for(int i = 1; i <= m ;i++)
            printf("%d\n", b[i].h);
        }
    return 0;
}

  

时间: 2024-08-10 17:05:01

FZU2077——暴力技巧——The tallest tree的相关文章

HDU 4509 湫湫系列故事——减肥记II(线段树-区间覆盖 或者 暴力技巧)

http://acm.hdu.edu.cn/showproblem.php?pid=4509 题目大意: 中文意义,应该能懂. 解题思路: 因为题目给的时间是一天24小时,而且还有分钟.为了解题方便,我们将小时换成分钟,那么一天24小时,总共有1440分钟.顾我就可以把一天里的任意HH:MM时间换成分钟.就这样一天的时间就变成[0,1440]区间了. 因为所给的活动最多是5*10^5,如果把活动的时间在线段[0,1440]都修改,那么时间的复杂度最坏是O(5*10^5*1440). (1)方法一

关于三分的暴力技巧(暴力好)

关于三分的暴力技巧 以下为暴力专场(前方高能) 现在以hdu4454为例 1.这道题的一个总结点是暴力对于精度不超过1e-2的东西,我们可以直接暴力求解 2.几何:对于一个圆(整个几何)都需要掌握三角函数的运用,这里有一篇非常不错的文章可以学习 3.圆到矩形的最短距离 关于圆到矩形的最短距离,主要是关于是到 矩形上垂直一点到圆最小(这时x和y都被"包围"): 矩形的四个顶点 具体看代码实现 现在附上超级牛逼的暴力代码(感谢qt神犇) #include<cmath> #inc

Maven类包冲突终极三大解决技巧 mvn dependency:tree

Maven对于新手来说是<步步惊心>,因为它包罗万象,博大精深,因为当你初来乍到时,你就像一个进入森林的陌生访客一样迷茫. Maven对于老手来说是<真爱配方>,因为它无所不能,利如刀锋,使用Maven做开发,如饮美酒如悦美人. Maven对于新手来说,最痛苦的一件事莫过于包之间的冲突,由于Maven的依赖传递性,当你引入一个依赖类时,其身后的依赖类也一起如过江之鲫纷至沓来了. 举例 A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M

Codeforces Round #312 (Div. 2)——C暴力技巧——Amr and Chemistry

Amr loves Chemistry, and specially doing experiments. He is preparing for a new interesting experiment. Amr has n different types of chemicals. Each chemical i has an initial volume of ai liters. For this experiment, Amr has to mix all the chemicals

XDOJ_1079_暴力技巧

http://acm.xidian.edu.cn/problem.php?id=1079 枚举每一个区间不行,就枚举每一对存在的数,然后用最大子串的思路,中间加上判断枚举的数是否存在. #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int a[100005],n,m,has[15]; int main() { int

Blizzard(暴力技巧+精度问题)

Blizzard Description 在魔兽争霸之冰封王座中有一个叫冰川的地图,里面有魔法传送阵,可以传送到这个此传送阵的对称传送阵位置.假设地图是圆形的,地图中心也就是圆心,在圆上每个点都有一个传送阵,可以传送到与地图圆心中心对称的位置.现在因为贪婪的大魔法师,人族正经历一场浩劫,作为聪明的兽族先知,信奉趁你病要你命的原则,想要趁机占领人族的土地.你能计算最短距离能够使兽族大军尽快到达人族营地? Input 第一行一个整数r(1 <= r <= 1000)代表地图的半径.接下来两行两个整

野生前端的数据结构练习(12)贪心算法

参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/GreedyAlogrithm 一.贪心算法 贪心算法属于比较简单的算法,它总是会选择当下最优解,而不去考虑单次递归时是否会对未来造成影响,也就是说不考虑得到的解是否是全局最优.在很多实际问题中,寻找全局最优解的代价是非常大的,这时候就可以通过求次优解来解决问题,这种思想其实在软件工程中很常见,例如React中著名的DOM Diff算法中需要对比两棵DOM树,树的完

GDOI2016游记

前言 今年的G(gao)D(dan)OI在四会中学(偏远地区) (这也算前言 由于赛艇不知道总结怎么写了,我就去抄我GDKOI总结的形式了. DAY 0 宾馆前台的那个地方让我觉得高能,然而初三并不住那-- 辣鸡WIFI啊! 看视频只能买流量快餐了(听说有5.1假期的10元1G 吃饭都是去四会中学,首先抱怨一下感觉车程有点长--饭菜还好,半自助的形式. 本来说要用samjia电脑玩鬼畜天线宝宝(雾 然而下错了一次我之前发现的链接又蜜汁被取消后,为了不浪费流量,就不下了-- DAY 1 过程: 辣

一些Linux工具

因为笔者本科是学电子的,所以大概去年的这个时候,我还对Linux一点儿也不了解,我一直以为操作系统就是Windows那样的,写程序就该是用VS那样的IDE.所以,刚接触Linux的时候我极端不适应,我可以说是很排斥用Linux,我当时很赞成曾经看到的一篇文章:使用Linux的程序员都是受虐狂.尤其是用shell,这怎么用啊?难道操作电脑不该是点击鼠标吗?还有写代码,vim更是变态啊,竟然有人用这种东西,简直无法理解.虽然Linux下现在也有了图形界面,但是跟Windows比这是渣渣好吗-- 后来