题解:

发现是一个环,而环的题目有一些就是要转化成为链

首先找到一个最高点,中间断开

然后当作一条链来做

代码:

#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的更多相关文章

  1. [51nod1482]部落信号 单调栈

    ~~~题面~~~ 题解: 可以发现这是一道单调栈的题目,首先来考虑数字没有重复时如何统计贡献. 因为这是一个环,而如果我们从最高的点把环断开,并把最高点放在链的最后面(顺时针移动),那么因为在最高点两 ...

随机推荐

  1. SQL语句 查询同一个字符在某一个字符串中出现的次数

    select len(replace(字段名A,';','--'))-len(字段名A) from table表名

  2. 如何给域名配置https证书

    http和https的区别就是,后者在网络传输过程中会很安全,原因就是给http安装了SSL证书. SSL证书有免费的和收费的,收费的顾名思义就是保护的方面更多,更安全.收费的像单域名的一年有几百.几 ...

  3. 【java工具类】java做的一个xml转Excel工具,基于maven工程

    说明:适合数据库导出为xml时转成Excel 本工具将上传至GitHub:https://github.com/xiaostudy/xiaostudyAPI3 doc4j的maven依赖 <!- ...

  4. Myeclipse中xml文件里自动提示消失解决办法

    IED Eclipse Java EE IDE for Web Developers:DTD 类型约束文件    1. Window->Preferences->XML->XML C ...

  5. hdu 5671 Matrix 标记。。。有点晕

    Matrix Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem ...

  6. shell while 语句

    普通循环格式: while condition do command done 例子一 #!/bin/bash )) do echo $int let "int++" done 结 ...

  7. 如何优化myeclipse.

    1.去除不需要加载的模块 一个系统20%的功能往往能够满足80%的需求,MyEclipse也不例外,我们在大多数时候只需要20%的系统功能,所以可以将一些不使用的 模块禁止 加载启动.通过Window ...

  8. Spring AOP 切面编程记录日志和接口执行时间

    最近客户现在提出系统访问非常慢,需要优化提升访问速度,在排查了nginx.tomcat内存和服务器负载之后,判断是数据库查询速度慢,进一步排查发现是因为部分视图和表查询特别慢导致了整个系统的响应时间特 ...

  9. HttpClient的用法总结

    使用HttpClient连接服务端的步骤: 1.创建HttpClient客户端对象 HttpClient client = new DefaultHttpClient(); 2.创建请求对象      ...

  10. SqlServer和Oracle判断表和列是否存在

    SqlServer .判断表Users是否存在 if object_id(N'Users',N'U') is not null print '存在' else print '不存在' .判断表User ...