1try
来源:互联网 发布:淘宝调研网站 编辑:程序博客网 时间:2024/05/20 19:46
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <algorithm>#include <vector>using namespace std;typedef long long LL;const int N=222222;LL Max[N][18],Min[N][18];int a[N],b[N],bit[N],n;LL Calc(int i,int mid,int k){ return max(Max[i][k],Max[mid+1-(1<<k)][k])-min(Min[i][k],Min[mid+1-(1<<k)][k]);}int main(){ //freopen("1.txt","r",stdin); int k=0; bit[1]=0; for (int i=2;i<N;i++){ if (i>=(1<<k+1))k++; bit[i]=k; } //for (int i=1;i<=100;i++)printf("%d %d\n",i,bit[i]); scanf("%d",&n); for (int i=1;i<=n;i++)scanf("%d",&a[i]),Max[i][0]=a[i];//LL for (int i=1;i<=n;i++)scanf("%d",&b[i]),Min[i][0]=b[i]; for (int L=1;L<=bit[n];L++)for (int i=1;i+(1<<L)-1<=n;i++){ Max[i][L]=max(Max[i][L-1],Max[i+(1<<L-1)][L-1]); Min[i][L]=min(Min[i][L-1],Min[i+(1<<L-1)][L-1]); } LL Res=0; for (int i=1;i<=n;i++){ int L=i,R=n,mid,Ans1=i,Ans2=n; while (L<=R){ mid=(L+R)>>1; if (Calc(i,mid,bit[mid+1-i])<=0)Ans1=mid,L=mid+1; else R=mid-1; } if (Calc(i,Ans1,bit[Ans1+1-i])!=0)continue; L=i,R=n; while (L<=R){ mid=(L+R)>>1; if (Calc(i,mid,bit[mid+1-i])>=0)Ans2=mid,R=mid-1; else L=mid+1; } Res+=Ans1-Ans2+1; } cout<<Res<<endl; return 0;}
0 0
- 1try
- try-catch 1
- try getAddress(1)
- Try Pangolin(1)
- try
- try
- try
- try
- try
- Try
- try
- try
- try
- try
- try
- try
- try
- try
- IP地址和子网掩码的关系
- nginx随记1
- pod计算资源管理
- 画图板
- Java知识点集锦
- 1try
- Mobile Service_纪中1327_dp
- mapreduce(六):MapReduce原理
- Java 快速读取文本文件最后一行数据
- SQL_Oracle 表中ID字段的自动递增
- Highcharts基础教程(一):Highcharts 的主要组成
- XML、JSON及其解析详解
- gvim配置(Windows版)
- CentOS 7 上部署Mono 4 和Jexus 5.6