博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小Z爱序列
阅读量:4360 次
发布时间:2019-06-07

本文共 1149 字,大约阅读时间需要 3 分钟。

题目背景

小Z最擅长解决序列问题啦,什么最长公共上升然后下降然后上升的子序列,小Z都是轻松解决的呢。

但是小Z不擅长出序列问题啊,所以它给了你一道签到题。

题目描述

给定一个n个数的序列ai,你要求出满足下述条件的点对的数量。

假设点对是(i , j),max(l,r)是[l,r]当中最大的ai的值。

这个点对满足条件当且仅当i+1<j 且 ai < max(i+1,j-1) < aj

为了简单,保证输入的是一个1-n的排列。相信你已经会做了吧?

输入输出格式

输入格式:

 

输入数据第一行有一个数字n,然后第二行有n个数。

 

输出格式:

 

输出仅包含一个数,表示满足条件的数对的数量。

 

输入输出样例

输入样例#1:
51 2 3 4 5
输出样例#1:
6

说明

样例中,满足条件的分别是(1,3),(1,4),(1,5),(2,4),(2,5),(3,5)

对于50%的数据,满足n<=300

对于95%的数据,满足n<=10000

对于100%的数据,满足n<=1000000

#include
#include
#include
#include
using namespace std;int read(){ int t=1,num=0; char c=getchar(); while(c>'9'||c<'0'){
if(c=='-')t=-1;c=getchar();} while(c>='0'&&c<='9'){num=num*10+c-'0';c=getchar();} return num*t;}const int maxn=1000010;int q[maxn],tot=0,n,zhi[maxn];long long ans=0;int main(){ n=read(); for(int i=1;i<=n;i++)zhi[i]=read(); for(int i=n;i;i--){ while(q[tot]<=zhi[i]&&tot)tot--; q[++tot]=zhi[i];if(tot>=3)ans+=tot-2ll; } printf("%lld",ans); return 0;}

本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。

转载于:https://www.cnblogs.com/Yzyet/p/6916084.html

你可能感兴趣的文章
Beanutils
查看>>
FastJson
查看>>
excel4j
查看>>
Thread
查看>>
char * 与char []探究理解
查看>>
QT窗体显示在屏幕中间位置
查看>>
emmet使用技巧
查看>>
RPC-Thrift(二)
查看>>
MSSQL for Linux 安装指南
查看>>
【Golang 接口自动化08】使用标准库httptest完成HTTP请求的Mock测试
查看>>
前端必读:浏览器内部工作原理
查看>>
Uri、URL和URN三者的区别
查看>>
数据字典的转换
查看>>
二维数组按照指定的字段排序的函数
查看>>
linux安装Mac的默认Monaco字体
查看>>
java语言的特点
查看>>
关于动态添加iview admin路由以及刷新侧边栏
查看>>
ApplicationInsights的探测器尝鲜
查看>>
java 解析Json格式数据
查看>>
unix中的线程池技术详解
查看>>