题意 (Codeforces 548D)

对一个有$n$个数的数列,我们要求其连续$x(1\le x\le n)$(对于每个$x$,这样的连续group有若干个)的最小数的最大值。

分析

这是一道用了单调栈的题目,用的贼好。算是第一次应用吧。
我们定义$l_i$为左侧比第$i$个数小的数的下标的最大值(没有就是0);$r_i$就是右侧比第$i$个数小的数的下标的最小值(没有就是$n+1$)。这样定义完后,我们会发现,$a_i$是$[a_{l_i+1},a_{r_i-1}]$的最小值,也就是size为$1,2,...,r_i-l_i-1$的最小值。这是可以线性地实现的,利用单调栈。具体实现见代码。
接下来就要更新答案。粗一看好像只有$O(n^2)$的更新方法。但是同样有线性的更新方法。维护一个$ans$数组,里面放了长度为$i$的时候的最大值。那么初始时,对每个$ans_i$作赋值(利用前面的两个数组并取最大值——要用最大值嘛)。接下来就是线性的骚操作:我们知道$ans_i$是$1,2,...,i$的最小值,那么倒过来逐对比较更新就可以了。
这样一来,就能用$O(3n)$的算法解决。

代码

#include <bits/stdc++.h>
#define MP make_pair
#define PB push_back
#define fi first
#define se second
#define ZERO(x) memset((x), 0, sizeof(x))
#define ALL(x) (x).begin(),(x).end()
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define per(i, a, b) for (int i = (a); i >= (b); --i)
#define QUICKIO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
using namespace std;
using ll = long long;
using ull = unsigned long long;
using pi = pair<int,int>;
const int MAXN=200000;
// After reading the editorial. int main()
{
QUICKIO
int n,arr[MAXN+5];
cin>>n; rep(i,1,n) cin>>arr[i];
int l[MAXN+5],r[MAXN+5];
stack<int> s;
rep(i,1,n)
{
while(!s.empty() && arr[s.top()]>=arr[i])
s.pop();
if(s.empty())
l[i]=0;
else
l[i]=s.top();
s.push(i);
}
s=stack<int>();
per(i,n,1)
{
while(!s.empty() && arr[s.top()]>=arr[i])
s.pop();
if(s.empty())
r[i]=n+1;
else
r[i]=s.top();
s.push(i);
}
int ans[MAXN+5]; memset(ans,-1,sizeof(ans));
rep(i,1,n)
{
int len=r[i]-l[i]-1;
ans[len]=max(ans[len],arr[i]);
}
per(i,n-1,1) ans[i]=max(ans[i],ans[i+1]);
rep(i,1,n)
{
cout<<ans[i];
if(i==n)cout<<endl;
else cout<<" ";
}
return 0;
}

引申

单调栈还有些类似的题目:HDU 1506、HDU 5033、POJ 2796、POJ 3250。
类似的还有单调队列。
题解将会之后补上。

「日常训练」Mike and Feet(Codeforces Round #305 Div. 2 D)的更多相关文章

  1. 「日常训练」Watering Flowers(Codeforces Round #340 Div.2 C)

    题意与分析 (CodeForces 617C) 题意是这样的:一个花圃中有若干花和两个喷泉,你可以调节水的压力使得两个喷泉各自分别以\(r_1\)和\(r_2\)为最远距离向外喷水.你需要调整\(r_ ...

  2. 「日常训练」Alternative Thinking(Codeforces Round #334 Div.2 C)

    题意与分析 (CodeForces - 603A) 这题真的做的我头疼的不得了,各种构造样例去分析性质... 题意是这样的:给出01字符串.可以在这个字符串中选择一个起点和一个终点使得这个连续区间内所 ...

  3. 「日常训练」More Cowbell(Codeforces Round #334 Div.2 B)

    题意与分析(CodeForces 604B) 题意是这样的:\(n\)个数字,\(k\)个盒子,把\(n\)个数放入\(k\)个盒子中,每个盒子最多只能放两个数字,问盒子容量的最小值是多少(水题) 不 ...

  4. 「日常训练」Ice Cave(Codeforces Round 301 Div.2 C)

    题意与分析(CodeForces 540C) 这题坑惨了我....我和一道经典的bfs题混淆了,这题比那题简单. 那题大概是这样的,一个冰塔,第一次踩某块会碎,第二次踩碎的会掉落.然后求可行解. 但是 ...

  5. 「日常训练」School Marks(Codeforces Round 301 Div.2 B)

    题意与分析(CodeForces 540B) 题意大概是这样的,有一个考试鬼才能够随心所欲的控制自己的考试分数,但是有两个限制,第一总分不能超过一个数,不然就会被班里学生群嘲:第二分数的中位数(科目数 ...

  6. 「日常训练」The Intriguing Obsession(CodeForces Round #439 Div.2 C)

    2018年11月30日更新,补充了一些思考. 题意(CodeForces 869C) 三堆点,每堆一种颜色:连接的要求是同色不能相邻或距离必须至少3.问对整个图有几种连接方法,对一个数取模. 解析 要 ...

  7. 「日常训练」Regular Bridge(Codeforces Round 306 Div.2 D)

    题意与分析 图论基础+思维题. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back #defi ...

  8. 「日常训练」Two Substrings(Codeforces Round 306 Div.2 A)

    题意与分析 一道非常坑的水题.分析醒了补. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back ...

  9. 「专题训练」Hard problem(Codeforces Round #367 Div. 2 C)

    题意与分析 题意:给出\(n\)个字符串,可以反转任意串,反转每个串都有其对应的花费\(c_i\).经过操作后是否能满足字符串\(\forall i \in [1,n] \text{且} i \in ...

随机推荐

  1. Unity】Socket 同步与异步

    http://blog.csdn.net/ldy597321444/article/details/51519157

  2. Unity3d-制作粒子光环特效

    http://blog.csdn.net/ozhangseno/article/details/70799611

  3. 实现虚拟(Virtual)DOM

    Virtual DOM算法 把一个div元素的属性打印出来,如下: 可以看到仅仅是第一层,真正DOM的元素是非常庞大的,这也是DOM加载慢的原因. 相对于DOM对象,原生的JavaScript对象处理 ...

  4. Linux服务器SMB服务挂载目录

    挂载方法 mount -o username=账号,password=密码 //SMB服务器IP/共享目录 /挂载点 smbclient链接 smbclient //SMB服务器IP/共享目录/ -U ...

  5. Spring知识点小结(一)

    一.Spring的简介 1.spring是一个full-stack轻量级开源框架    2.spring的两大核心        IoC: inverse of control  控制反转:反转是对象 ...

  6. WebSocket 和socket 的区别

    去年光棍节的时候,我写过一篇 quick-cocos2d-x 中的 socket 技术选择:LuaSocket 和 WebSocket .这篇文章介绍了我为何决定在项目中使用 LuaSocket . ...

  7. 初探css3

    属性选择器: 1.完全匹配的属性选择器. 就是完全匹配的字符串. [id=article]{ color:red; } 2.包含匹配选择器.包含有指定的字符串. 语法是:[attribute*=val ...

  8. Linux基础 ppt pptx

    引言 以前写过一个讲 Linux 基础的ppt,琢磨着把它分享出来,有需要的请自取. 部分截图如下 下载地址 下载地址1

  9. FastJson反序列化漏洞利用的三个细节 - TemplatesImpl的利用链

    0. 前言 记录在FastJson反序列化RCE漏洞分析和利用时的一些细节问题. 1. TemplatesImpl的利用链 关于 parse 和 parseObject FastJson中的 pars ...

  10. poj 2763 Housewife Wind : 树链剖分维护边 O(nlogn)建树 O((logn)²)修改与查询

    /** problem: http://poj.org/problem?id=2763 **/ #include<stdio.h> #include<stdlib.h> #in ...