对于60%的数据:暴力枚举对于100%的数据:因为排列是随机的,所以从每个点向后可能的差值最多2logn个,所以答案最多只可能有nlogn种,用单调队列找出来统计即可

维护对于每个位置,向右能影响到的点的下一个点,统计答案时一直跳即可

代码:

#include<iostream>
#include<cstdio>
using namespace std;
int T,n,top;
const int N=100010;
int a[N],mx[N],mi[N],sta[N];
long long ans;
int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
void slove()
{
int maxx,minn;
for(int i=1;i<=n;++i)mx[i]=mi[i]=n+1;
top=0;
for(int i=1;i<=n;++i)
{
while(top&&a[i]>a[sta[top]])
{
mx[sta[top--]]=i;
}
sta[++top]=i;
}
top=0;
for(int i=1;i<=n;++i)
{
while(top&&a[i]<a[sta[top]])
{
mi[sta[top--]]=i;
}
sta[++top]=i;
}
for(int i=1;i<=n;++i)
{
maxx=minn=i;
while(maxx<=n&&minn<=n)
{
if(mx[maxx]<=mi[minn])
{
ans+=(long long)(mx[maxx]-max(maxx,minn))*(a[maxx]-a[minn]);
maxx=mx[maxx];
}
else
{
ans+=(long long)(mi[minn]-max(maxx,minn))*(a[maxx]-a[minn]);
minn=mi[minn];
}
}
}
}
int main()
{
#ifdef yilnr
#else
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
#endif
cin>>T;
while(T--)
{
ans=0;
n=read();
for(int i=1;i<=n;++i)a[i]=read();
slove();
printf("%lld\n",ans);
}
fclose(stdin);fclose(stdout);
return 0;
}
/*
3
4
3 2 4 1
4
3 2 4 1
4
3 2 4 1
*/

最新文章

  1. SpringMVC无法获取请求中的参数的问题的调查与解决(2)
  2. 我与solr(三)--solr后台相关介绍
  3. 高性能ORM 框架之 MySqlSugar
  4. SPOJ 1811 Longest Common Substring
  5. Java向上转型与向下转型
  6. (转)Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)
  7. UVA 1594 Ducci Sequence(两极问题)
  8. 转载:Ubuntu下deb包的安装方法
  9. JQuery基础知识学习1
  10. Java中引用传递
  11. mysql 函数学习(常用)
  12. MyCP(课下作业,必做)
  13. [解决方法] Java-Class.forName() 反射/映射子类 并转化为父类/接口
  14. java基础知识—类和对象
  15. C# WebAPI学习
  16. 跟踪OceanLotus的新下载程序KerrDown
  17. [qemu][cloud][centos][ovs][sdn] centos7安装高版本的qemu 以及 virtio/vhost/vhost-user咋回事
  18. python-selenium,关于页面滑动的操作
  19. JavaWeb 服务启动时,在后台启动加载一个线程
  20. ZOJ 3623 Battle Ships DP

热门文章

  1. chrome 调试 ios h5
  2. IDEA中通过Maven插件使用MyBatis Generator
  3. 使用SplFixedArray创建固定大小的数组
  4. RMAN执行crosscheck archive报错ORA-19633问题处理
  5. C# 对象互转
  6. Linux 安装Mysql(图文教程)
  7. pytorch自定义网络层以及损失函数
  8. 记一次Git提交报错的问题
  9. 【shell脚本】$ 在shell脚本中的使用
  10. 基于vue的购物车清单