cf319b Psychos in a Line(单调队列 贪心)

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define MAXN 100000+10
int n,st[MAXN],cnt,a[MAXN],kill[MAXN]={0},f[MAXN]={0};
int main()
{
    int ans;
    int i;
    while(scanf("%d",&n)!=EOF)
    {
        memset(kill,0,sizeof(kill));
        memset(f,0,sizeof(f));//f[i]  表示  [i,n]中i杀人的次数
        cnt=0;ans=0;

        for(i=1;i<=n;i++)
            scanf("%d",&a[i]);

        for(i=n;i>0;i--)
        {
         int t=0;
         while (cnt&&a[st[cnt]]<a[i])
         {
                t++;
                f[i]=t=max(t,f[st[cnt]]);
                cnt--;
         }
         st[++cnt]=i;
         ans=max(ans,t);
        }
       printf("%d\n",ans);
    }
    return 0;
}

  

时间: 2024-10-11 01:20:31

cf319b Psychos in a Line(单调队列 贪心)的相关文章

Codeforces Round #189 (Div. 1) B. Psychos in a Line 单调队列

B. Psychos in a Line Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem/319/B Description There are n psychos standing in a line. Each psycho is assigned a unique integer from 1 to n. At each step every psycho who h

HDU 5380 Travel with candy (单调队列&amp;贪心)

本文纯属原创,转载请注明出处.http://blog.csdn.net/zip_fan,谢谢. 题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5380. Travel with candy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Problem Description There are n+1 cities on

CF 319B Psychos in a Line 【单调队列】

给出一排神经病的编号1-n的某个排列 给出规则 一步能同时消除该数右边连续的小于该数的数 问几步能消到最后状态 在纸上试了试,觉得这个问题很有点像lis,但是苦于方法 突然看了一眼tags 单调队列 oh it is 可以把这些数字一个一个的加入单调队列中 同时记录每个数字被吃掉的场次 保持整个队列递减 策略如下 如果一个数进去没有弹出数,则这个数肯定是第一场就被消掉的 如果一个数进去弹出了一些数,则该数被吃掉的场次等于它弹走的所有数中最大的被吃掉的场次序号+1 因为,这个数肯定是在它弹掉的数之

HDU 6047 Maximum Sequence (贪心+单调队列)

题意:给定一个序列,让你构造出一个序列,满足条件,且最大.条件是 选取一个ai <= max{a[b[j], j]-j} 析:贪心,贪心策略就是先尽量产生大的,所以就是对于B序列尽量从头开始,由于数据比较大,采用桶排序,然后维护一个单调队列,使得最头上最大. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #i

BZOJ 2424 订货(贪心+单调队列)

怎么题解都是用费用流做的啊...用单调队列多优美啊. 题意:某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为零,问如何安排这n个月订购计划,才能使成本最低?每月月初订购,订购后产品立即到货,进库并供应市场,于当月被售掉则不必付存贮费.假设仓库容量为S. 首先这道题和经典的汽车加油问题差不多,那道题可以用单调队列做,然而这道题也是可以的. 此题唯一的难点在于存储费用m,也

codeforces 251A Points on Line(二分or单调队列)

Description Little Petya likes points a lot. Recently his mom has presented him n points lying on the line OX. Now Petya is wondering in how many ways he can choose three distinct points so that the distance between the two farthest of them doesn't e

【贪心/DP/单调队列】【CF1029B】Creating the Contest

Description 给你一个单调不下降的长度为n的序列,请你找出一个最长的子序列,满足找出的子序列中,\(A_i<=A_{i-1}~\times~2\),其中i为下标,A为找出的子序列.对于一个长度为\(p\)的子序列,\(i~\in~[1,p-1]\). Input 两行,第一行是原序列的长度\(n\) 第二行是\(n\)个数,代表原序列中的\(n\)个数. Output 一行一个数,代表最长的长度 Sample Input 10 1 2 5 6 7 10 21 23 24 49 Samp

USACO 2009 Open 干草塔 Tower of Hay(贪心+单调队列优化DP)

https://ac.nowcoder.com/acm/contest/1072/B Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草包会从传送带上运来,共会出现N包干草,第i包干草的宽度是Wi,高度和长度统一为1.干草塔要从底层开始铺建.贝西会选择最先送来的若干包干草,堆在地上作为第一层,然后再把紧接着送来的几包干草包放在第二层,再铺建第三层……重复这个过程,一直到所有的干草全部用完.每层的干草包必须紧靠在一起,不出现缝隙,而且为了建筑稳定,

Max Sum of Max-K-sub-sequence(单调队列)

Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7034    Accepted Submission(s): 2589 Problem Description Given a circle sequence A[1],A[2],A[3]......A[n]. Circle se