Imbalanced Array
题目
解析
学单调栈时偶然看到了这一题,就写掉了
想一下暴力,O(n3),n<=106,神威太湖之光都跑不过去
加个ST表,O(n2),天河二号跑得过去,你谷评测姬就别想了
考虑每个点对结果贡献,得到是左右拓展,最优是O(n),随便构造一个数据就退化为O(n2)了
加上单调栈优化,然后就做到了了传说中的O(n)!
稳稳过掉
附:居然放过去了一位O(nlogn)的,希望早日把n开到107
第一篇题解是同机房的dalao写的,但说错了一点:longlong不会炸,害的我去翻int128
code:
#include<cstdio>
#define int long long
#define rr register int
using namespace std;
inline bool idigit(char x){
return (x<'0'|x>'9')?0:1;}
inline int read()
{
int num=0,f=1;
char c=0;
while(!idigit(c=getchar())){
if(c=='-')f=-1;}
while(idigit(c))num=(num<<1)+(num<<3)+(c&15),c=getchar();
return num