51nod1482
题解:
发现是一个环,而环的题目有一些就是要转化成为链
首先找到一个最高点,中间断开
然后当作一条链来做
代码:
#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fd(i,a,b) for(i=a;i>=b;i--)
using namespace std;
typedef long long ll;
const int N=+;
int a[N],b[N],left[N],right[N],same[N],sta[N],bz[N];
int i,j,k,l,t,n,m,mx,top;
ll ans;
int read()
{
int x=;
char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x;
}
int main()
{
n=read();
fo(i,,n)
{
a[i]=read();
if (!mx||a[i]>a[mx]) mx=i;
}
fo(i,mx,n) b[++top]=a[i];
fo(i,,mx-) b[++top]=a[i];
fo(i,,n) a[i]=b[i];
top=;
fo(i,,n)
{
while (top&&a[i]>=a[sta[top]]) top--;
left[i]=sta[top];
sta[++top]=i;
}
top=;
sta[]=n+;
fd(i,n,)
{
while (top&&a[i]>=a[sta[top]])
{
if (a[i]==a[sta[top]]) same[i]=same[sta[top]]+;
top--;
}
right[i]=sta[top];
sta[++top]=i;
}
fo(i,,n)
{
if (left[i]>) ans++;
if (right[i]<=n) ans++;
ans+=(ll)same[i];
}
mx=;
fo(i,,n)
{
if (mx<=a[i]) bz[i]=;
mx=max(mx,a[i]);
}
mx=;
fd(i,n,)
{
if (mx<=a[i]) bz[i]=;
mx=max(mx,a[i]);
}
fo(i,,n) ans+=bz[i];
printf("%I64d\n",ans);
}
51nod1482的更多相关文章
- [51nod1482]部落信号 单调栈
~~~题面~~~ 题解: 可以发现这是一道单调栈的题目,首先来考虑数字没有重复时如何统计贡献. 因为这是一个环,而如果我们从最高的点把环断开,并把最高点放在链的最后面(顺时针移动),那么因为在最高点两 ...
随机推荐
- Python3基础 file for+文件指针 读取txt文本并 一行一行的输出(高效率)
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Https流程,openssl本地自建证书,抓包
HTTPS:超文本安全传输协议,和HTTP相比,多了一个SSL/TSL的认证过程,端口为443在http(超文本传输协议)基础上提出的一种安全的http协议,因此可以称为安全的超文本传输协议.http ...
- sql:临时表和表变量
在SQL Server的性能调优中,有一个不可比拟的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集,表变量和临时表是两种选择. 临时表: 临时对象都以#或##为前缀,临时表是 ...
- BZOJ3884: 上帝与集合的正确用法 拓展欧拉定理
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“ ...
- eclipse 在线安装反编译插件
打开eclipse help>install New Software…..>add Name:jd-eclipse_update_site Location:http://jd.beno ...
- JavaScript紧凑学习
JavaScript紧凑学习 windows本地,调用命令行: win键+R 键入cmd , (cmd是Command 命令行 简称) 目录是C盘下的 C:\Users\Administrator&g ...
- 大数字运算, BigInteger
package com.ykmimi.test1; import java.math.BigInteger; /** * 大数字运算 * @author ukyor * */ public class ...
- ZOJ 3329 One Person Game (经典概率dp+有环方程求解)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3329 题意:现在有三个骰子,分别有k1,k2和k3面,面上的点就是1~ki ...
- UOJ 171 【WC2016】挑战NPC
一开始还真没想到是一般图匹配这种模型(毕竟才会的带花树) 把每一个盒子拆成3个,每一个可以放置进它的小球分别向这三个点连边,然后这三个点在连成一个三元环,最终答案就是小球数目-匹配数. 由于是一般图, ...
- C++:delete不完整类型的指针
简单版 以下代码编译时会有warning: class X; void foo(X* x) { delete x; } 在GCC4.1.2下,编译出错信息是: warning: possible pr ...