zoukankan      html  css  js  c++  java
  • GRYZY- #10. 财富

    财富(treasure)

    Time Limit:1000ms Memory Limit:128MB

    题目描述

    LYK有n个小伙伴。每个小伙伴有一个身高hi。 这个游戏是这样的,LYK生活的环境是以身高为美的环境,因此在这里的每个人都羡慕比自己身高高的人,而每个人都有一个属性ai表示它对身高的羡慕值。 这n个小伙伴站成一列,我们用hi来表示它的身高,用ai来表示它的财富。 每个人向它的两边望去,在左边找到一个最近的比自己高的人,然后将ai朵玫瑰给那个人,在右边也找到一个最近的比自己高的人,再将ai朵玫瑰给那个人。当然如果没有比自己身高高的人就不需要赠送别人玫瑰了。也就是说一个人会给0,1,2个人玫瑰(这取决于两边是否有比自己高的人)。 每个人都会得到若干朵玫瑰(可能是0朵),LYK想知道得了最多的玫瑰的那个人得了多少玫瑰。(然后嫁给他>3<)

    输入格式(treasure.in)

    第一行一个数n表示有n个人。
    
    接下来n行,每行两个数hi,ai。

    输出格式(treasure.out)

    一个数表示答案。 

    输入样例

    3

    4 7

    3 5

    6 10

    输出样例

    12

    样例解释

    第一个人会收到5朵玫瑰,第二个没人送他玫瑰,第三个人会收到12朵玫瑰。

    数据范围

    对于50%的数据n<=1000,hi<=1000000000。

    对于另外20%的数据n<=50000,hi<=10。

    对于100%的数据1<=n<=50000,1<=hi<=1000000000。1<=ai<=10000。

    单调队列处理出每个点向两端取第一个比他大的数的下标

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn  = 50005;
    struct node{
        int h,a;
    }peo[maxn];
    int n;
    int l[maxn],r[maxn],d[maxn],tmp1[maxn],tmp2[maxn],q[maxn];
    void work(int *a,int *b) {
        int head=1,tail=1;d[1]=1;
        q[1]=a[1];
        for(int i=2;i<=n;++i) {
            while(head<=tail&&q[tail]<a[i])b[d[tail--]]=i;
            q[++tail]=a[i];
            d[tail]=i;
        }
        while(head<=tail)b[d[head++]]=n+1;
    }
    int sum[maxn];
    int main() {
        scanf("%d",&n);
        for(int i=1;i<=n;++i) {
            scanf("%d%d",&peo[i].h,&peo[i].a);tmp1[i]=tmp2[n-i+1]=peo[i].h;
        }
        work(tmp1,r);
        work(tmp2,l);
        for(int i=1;i<=n;++i) d[i]=l[i];
        for(int i=1;i<=n;++i) l[n-i+1]=n-d[i]+1;
        for(int i=1;i<=n;++i) sum[l[i]]+=peo[i].a,sum[r[i]]+=peo[i].a;
        int ans=0;
        for(int i=1;i<=n;++i) ans=max(ans,sum[i]);
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    算法与数据结构实验题 5.2 Missile
    算法与数据结构实验题 2.3 击鼓传花
    算法与数据结构实验题 2.4 排队
    Linux 添加自定义命令
    转 32位linux内核2.6.38.2添加系统调用,编写类似"ps"命令模块显示进程信息
    Linux内核模块程序加载方法
    Linux下sched.h文件分析
    Kali 爆破和非爆破无线路由账号和密码+让别人无线掉线
    Kali基于路由器的ARP欺骗转发机制
    Kali nmap教程用法简介
  • 原文地址:https://www.cnblogs.com/sssy/p/7693202.html
Copyright © 2011-2022 走看看