「CF5E」Bindian Signalizing
传送门
Luogu
解题思路
很显然的一点,任何一条可能成为路径的圆弧都不可能经过最高的点,除非这条路径全是最高点。
所以我们先把最大值抠掉,把剩下的按原来的顺序排好。
从前往后、从后往前扫两次,用单调栈维护,记得计算连续的重复数字之后累加。
最后再用最大值随便匹配一下。
细节注意事项
- 咕咕咕。。。
参考代码
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#define rg register
using namespace std;
template < typename T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while (!isdigit(c)) f |= (c == '-'), c = getchar();
while (isdigit(c)) s = s * 10 + (c ^ 48), c = getchar();
s = f ? -s : s;
}
typedef long long LL;
const int _ = 1000000 + 10;
int n, a[_], s[_];
int top, st[_], cnt[_], vis[_];
int main() {
#ifndef ONLINE_JUDGE
freopen("in.in", "r", stdin);
#endif
read(n);
for (rg int i = 1; i <= n; ++i) read(a[i]), cnt[i] = 0, vis[i] = 0;
int mp = 0, len = 0;
for (rg int i = 1; i <= n; ++i) if (a[i] > a[mp]) mp = i;
for (rg int i = mp + 1; i <= n; ++i) s[++len] = a[i];
for (rg int i = 1; i <= mp - 1; ++i) s[++len] = a[i];
LL ans = 0;
top = 0;
for (rg int i = 1; i <= len; ++i) {
while (top && s[st[top]] <= s[i]) {
if (s[st[top]] == s[i]) cnt[i] = cnt[st[top]] + 1;
--top;
}
if (top) ++ans;
st[++top] = i;
}
top = 0;
for (rg int i = len; i >= 1; --i) {
while (top && s[st[top]] <= s[i]) --top;
if (top) ++ans;
st[++top] = i;
}
for (rg int i = 1; i <= len; ++i) ans += cnt[i];
int mid = 0;
for (rg int i = 1; i <= len; ++i)
if (s[i] >= mid) ans += !vis[i], vis[i] = 1, mid = s[i];
mid = 0;
for (rg int i = len; i >= 1; --i)
if (s[i] >= mid) ans += !vis[i], vis[i] = 1, mid = s[i];
printf("%lld\n", ans);
return 0;
}
完结撒花 \(qwq\)
「CF5E」Bindian Signalizing的更多相关文章
- CF5E 【Bindian Signalizing】
题意 \(n\)座山组成一个环,相连的圆弧上其他山它们高那么这两座山能互相看到,求能看到的山的组数. 题解 设\(left[i]\)表示左边第一个比\(i\)高的位置,同理\(right[i]\)表示 ...
- 【单调栈】【CF5E】 Bindian Signalizing
传送门 Description 给你一个环,环上有一些点,点有点权.定义环上两点能相互看见当且仅当两点间存在一个弧使得弧上不存在一个点的点权大于着两个点.求一共有多少个点能互相看到 Input 第一行 ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
- 「2014-3-18」multi-pattern string match using aho-corasick
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...
随机推荐
- 需要写的CSS博客
重绘与回流 BFC 水平垂直居中 定位 基线各种线 inline-block,img标签空字符
- 吴裕雄 python 神经网络——TensorFlow 数据集高层操作
import tempfile import tensorflow as tf train_files = tf.train.match_filenames_once("E:\\output ...
- BUG搬运工:CSCun88303-CIMC Memory Leak : Can't SSH/HTTP to CIMC
Symptom:Unable to SSH/HTTP to the CIMC of the C-series server, however the CIMC can be pinged. Also ...
- WLC HA模式下的注意事项
管理控制器:1.控制器默认开启的是SSH (CLI),Secure Web/https (GUI)2.登录控制器的管理地址为Active设备所控制(主备的配置同步,所以管理地址一致)3.WLC HA状 ...
- SSD算法
SSD算法 2016 出的目标检测算法 SSD效果主要有三点: 1.多尺度 2.设置了多种宽高比的(anchor box)default box 3.数据增强 1.1 设置 default box ...
- PyCharm调试方法
1.调试部分代码以后继续执行剩余代码,点击Resume Program:
- vue 项目中的less
收先要在cmd中运行 npm install less less-loader --save 然后会在 moudules文件夹中生成less 和less-loader <style lang=& ...
- redis requires Ruby version >= 2.2.2 系统默认 ruby 版本过低,导致 Redis 接口安装失败
安装 Redis 接口时异常 ,系统 ruby 版本过低 ! 输入命令 " gem install redis " 出现 " ERROR: Error installi ...
- ava StringTokenizer 类使用方法
菜鸟教程 -- 学的不仅是技术,更是梦想! 首页 笔记首页 Android 互联网 程序员人生 程序员笑话 编程技术 红包 知识店铺 --> 首页 Android 鸡汤 逗乐 Search Ja ...
- URL和 URI 的区别
URL:统一资源定位符 URI:统一资源标识符 URL 是 URI 的一个子集: 来源知乎 1.统一资源标识符 URI 就是在某一规则下能把一个资源独一无二的表示出来. 拿人做例子,假设这个世界上多有 ...