• 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
    ", b[i].h);
            }
        return 0;
    }
    

      

  • 相关阅读:
    HTTP协议实体的基本讲解
    了解Xcode目录结构 开发者必看
    图解oracle 之从客户端到服务端的sql追击
    iPhone开发经典语录集锦
    iphone网络编程 http请求 get / post(发送二进制文件) 总结
    iPhone 路径大全
    http发送文件的原理
    iPhone开发面试题葵花宝典
    来自mooon的最简单的日志类CSimpleLogger
    不再担心日志文件过大:通用日志滚动脚本
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4657367.html
Copyright © 2020-2023  润新知