「codeforces - 1674F」Madoka and Laziness
如果做过 codeforces - 1144G 那这题最多 *2200。
序列中的最大值必然为其中一个拐点,不妨设 \(a_p = a_\max\),先讨论另一个拐点 \(i\) 在 \(p\) 左侧的情况。于是问题转化为规划 \([1, i)\),\((i, p)\),\((p, n]\) 几个区间中的数给 \(i\) 还是给 \(p\)。
对于 \([1, i)\),令 \(dp[i]\) 表示将 \([1, i]\) 分为两个 strictly increasing subsequence,其中不以 \(i\) 结尾的 subsequence 的结尾元素的最小值,分讨转移即可。
对于 \((i, p)\),同 codeforces - 1144G,which is 这题唯一的难点。
对于 \((p, n]\),同情况 1。
不太会写代码,,,参考了下 editorial,,,
#include <bits/stdc++.h>
#define cm(x, y) x = min(x, y)
#define cm2(x, y) x = max(x, y)
using namespace std;
int n, a[500100], pos, dp[500100], dp2[500100], dp3[500100][2];
int solve() {
pos = n;
for (int i=0; i<n; ++i) {
if (a[i] > a[pos]) {
pos = i;
}
}
dp[0] = -1;
for (int i=1; i<=pos; ++i) {
dp[i] = 1e9;
if (a[i] > dp[i-1]) {
cm(dp[i], a[i-1]);
}
if (a[i] > a[i-1]) {
cm(dp[i], dp[i-1]);
}
}
dp2[n-1] = -1;
for (int i = n-2; i>=pos; --i) {
dp2[i] = 1e9;
if (a[i] > dp2[i+1]) {
cm(dp2[i], a[i+1]);
}
if (a[i] > a[i+1]) {
cm(dp2[i], dp2[i+1]);
}
}
int res = 0;
dp3[pos][0] = dp[pos];
for (int i=pos+1; i<n; ++i) {
dp3[i][0] = 1e9;
dp3[i][1] = -1e9;
if (a[i-1] > a[i]) {
cm(dp3[i][0], dp3[i-1][0]);
}
if (dp3[i-1][1] > a[i]) {
cm(dp3[i][0], a[i-1]);
}
if (a[i-1] < a[i]) {
cm2(dp3[i][1], dp3[i-1][1]);
}
if (dp3[i-1][0] < a[i]) {
cm2(dp3[i][1], a[i-1]);
}
res += dp3[i][1] > dp2[i];
}
return res;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i=0; i<n; ++i) {
cin >> a[i];
}
int ret = solve();
reverse(a, a+n);
cout << ret+solve() << "\n";
}
「codeforces - 1674F」Madoka and Laziness的更多相关文章
- 「CodeForces 581D」Three Logos
BUPT 2017 Summer Training (for 16) #3A 题意 给你三个矩形,需要不重叠不留空地组成一个正方形.不存在输出-1,否则输出边长和这个正方形(A,B,C表示三个不同矩形 ...
- 「CodeForces - 50C 」Happy Farm 5 (几何)
BUPT 2017 summer training (16) #2B 题意 有一些二维直角坐标系上的整数坐标的点,找出严格包含这些点的只能八个方向走出来步数最少的路径,输出最少步数. 题解 这题要求严 ...
- 「CodeForces - 598B」Queries on a String
BUPT 2017 summer training (for 16) #1I 题意 字符串s(1 ≤ |s| ≤ 10 000),有m(1 ≤ m ≤ 300)次操作,每次给l,r,k,代表将r位置插 ...
- 「CodeForces - 717E」Paint it really, really dark gray (dfs)
BUPT 2017 summer training (for 16) #1H 题意 每个节点是黑色or白色,经过一个节点就会改变它的颜色,一开始在1节点.求一条路径使得所有点变成黑色. 题解 dfs时 ...
- 「CodeForces 476A」Dreamoon and Stairs
Dreamoon and Stairs 题意翻译 题面 DM小朋友想要上一个有 \(n\) 级台阶的楼梯.他每一步可以上 \(1\) 或 \(2\) 级台阶.假设他走上这个台阶一共用了 \(x\) 步 ...
- 「CodeForces 546B」Soldier and Badges 解题报告
CF546B Soldier and Badges 题意翻译 给 n 个数,每次操作可以将一个数 +1,要使这 n 个数都不相同, 求最少要加多少? \(1 \le n \le 3000\) 感谢@凉 ...
- 「Codeforces 79D」Password
Description 有一个 01 序列 \(a_1,a_2,\cdots,a_n\),初始时全为 \(0\). 给定 \(m\) 个长度,分别为 \(l_1\sim l_m\). 每次可以选择一个 ...
- 「Codeforces 468C」Hack it!
Description 定义 \(f(x)\) 表示 \(x\) 的各个数位之和.现在要求 \(\sum_{i=l}^rf(i)\bmod a\). 显然 ans=solve(l,r)%a; if(a ...
- 「Codeforces 724F」Uniformly Branched Trees
题目大意 如果两棵树可以通过重标号后变为完全相同,那么它们就是同构的. 将中间节点定义为度数大于 \(1\) 的节点.计算由 \(n\) 个节点,其中所有的中间节点度数都为 \(d\) 的互不同构的树 ...
- 「codeforces - 1284G」Seollal
给定 \(n\times m\) 的网格图,有些格子有障碍,无障碍且相邻的格子之间连边形成图.保证 \((1, 1)\) 无障碍,保证无障碍格子连通. 将网格图黑白染色,相邻格子颜色不同,\((1, ...
随机推荐
- wait,notify,notifyAll,sleep,join等线程方法的全方位演练
一.概念解释 1. 进入阻塞: 有时我们想让一个线程或多个线程暂时去休息一下,可以使用 wait(),使线程进入到阻塞状态,等到后面用到它时,再使用notify().notifyAll() 唤醒它,线 ...
- ARC142
ARC142 考试情况:一眼订正,鉴定为做出前三题. A - Reverse and Minimize 分析题目性质可得三种情况: \(K\) 末尾有 \(0\) 最多只有 \(K\) 本身一个答案. ...
- Docker 的安装及常用命令
CentOS Docker 安装 参看链接 Windows安装 Docker Desktop 官方下载地址: https://hub.docker.com/editions/community/doc ...
- Unity UGUI的所有组件的介绍及使用
Unity UGUI的所有组件的介绍及使用 本文将介绍Unity UGUI中的各个组件,包括它们的具体介绍.用途 1. Text(文本) 介绍:Text组件用于在UI界面上显示文本内容. 用途:常用于 ...
- Typora markdown 满屏显示,去除两边的留白
Typora 宽度在CSS样式文件中有个 max-width 值,现在的显示器分辨率比较高,会导致编辑器两边留白比较多 导致文档编辑时,高分辨率的显示器,得不到充分利用 解决方案 修改源码编辑器样式 ...
- CS144 LAB5~LAB6
CS144 lab5~6 最后两个lab了,虽然很多大佬都说剩下的两个lab比起TCP的实现,"简直太简单了",但是我认为做这两个之前需要补充一些额外的网络知识,不然直接上手去做的 ...
- 从逻辑门到 CPU
目的,造一个很简单的,概念上的 CPU,虽然简单,但是是五脏俱全的 CPU 从最基础的逻辑门开始造,零基础可以看 制造基本武器:与门.非门.或门 现在计算机都是二进制,那二进制是一开始就能想到的吗?显 ...
- sql中当关联查询主表很大影响查询速度时怎么办?
sql中当关联查询主表很大时,直接关联,查询速度会较慢,这时可以先利用子查询经筛选条件筛除一部数据,这样主连接表体量减少,这样能一定程度加快速度. (1)常规join -- 最慢7.558s sele ...
- MAUI Blazor项目中如何添加一个返回服务,并支持安卓返回键
前言 MAUI Blazor中,安卓项目的返回键体验很不好,只能如同浏览器一样返回上一页.但很多时候,我们想让他返回的上一页,不一定就是实际上的上一页.而且也想让返回键去支持一些事件,按下返回键触发, ...
- Nginx:client_body_temp_path 指令的上传文件测试
结论 硬盘必须要有上传文件3倍大小的剩余空间.否则会报错"no space left on device". 需要注意,这3份数据都会写到硬盘.大文件上传,实时观察硬盘剩余空间wa ...