本地测 1.2到1.3s左右
#include<bits/stdc++.h>
// #pragma GCC optimize("Ofast")
// #pragma GCC optimize("-funroll-loops")
using namespace std;
constexpr int N=1e5+5,P=1e9+7;
char buf[1<<21],*p1,*p2;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
int rd(){
int num=0;char c=0;
while(!isdigit(c))c=getchar();
while(isdigit(c))num=num*10+c-'0',c=getchar();
return num;
}
void wt(long long x,char ch=0){if(x<0) putchar('-'),wt(-x);else{if(x>=10) wt(x/10);putchar(x%10+'0');}if(ch) putchar(ch);return;}
int n;
int a[N];
signed main(){
// freopen("c.in","r",stdin);
// freopen("c.out","w",stdout);
n=rd();
long long res=0;
for(int i=1;i<=n;i++)
{
a[i]=rd();
}
int i;
int j,mx=0,mv;
int p,mx1=0,mv1;
int g,mx2=0,mv2;
for(i=1;i+2<=n;i+=3)
{
mx=0;
mx1=0;
mx2=0;
for(j=i;j-2>=1;j-=3)
{
if(a[j]>mx)mx=a[j],mv=mx/a[i];
if(a[j]<=mv)res++;
if(a[j-1]>mx)mx=a[j-1],mv=mx/a[i];
if(a[j-1]<=mv)res++;
if(a[j-2]>mx)mx=a[j-2],mv=mx/a[i];
if(a[j-2]<=mv)res++;
if(a[j+1]>mx1)mx1=a[j+1],mv1=mx1/a[i+1];
if(a[j+1]<=mv1)res++;
if(a[j]>mx1)mx1=a[j],mv1=mx1/a[i+1];
if(a[j]<=mv1)res++;
if(a[j-1]>mx1)mx1=a[j-1],mv1=mx1/a[i+1];
if(a[j-1]<=mv1)res++;
if(a[j+2]>mx2)mx2=a[j+2],mv2=mx2/a[i+2];
if(a[j+2]<=mv2)res++;
if(a[j+1]>mx2)mx2=a[j+1],mv2=mx2/a[i+2];
if(a[j+1]<=mv2)res++;
if(a[j]>mx2)mx2=a[j],mv2=mx2/a[i+2];
if(a[j]<=mv2)res++;
}
while(j>0)
{
if(a[j]>mx)mx=a[j],mv=mx/a[i];
if(a[j]<=mv)res++;
if(a[j+1]>mx1)mx1=a[j+1],mv1=mx1/a[i+1];
if(a[j+1]<=mv1)res++;
if(a[j+2]>mx2)mx2=a[j+2],mv2=mx2/a[i+2];
if(a[j+2]<=mv2)res++;
j--;
}
p=j+1,g=j+2;
while(p>0)
{
if(a[p]>mx1)mx1=a[p],mv1=mx1/a[i+1];
if(a[p]<=mv1)res++;
p--;
}
while(g>0)
{
if(a[g]>mx2)mx2=a[g],mv2=mx2/a[i+2];
if(a[g]<=mv2)res++;
g--;
}
}
while(i<=n)
{
mx=0;
for(j=i;j-2>=1;j-=3)
{
if(a[j]>mx)mx=a[j],mv=mx/a[i];
if(a[j]<=mv)res++;
if(a[j-1]>mx)mx=a[j-1],mv=mx/a[i];
if(a[j-1]<=mv)res++;
if(a[j-2]>mx)mx=a[j-2],mv=mx/a[i];
if(a[j-2]<=mv)res++;
}
while(j>0)
{
if(a[j]>mx)mx=a[j],mv=mx/a[i];
if(a[j]<=mv)res++;
j--;
}
++i;
}
wt(res);
fclose(stdin);
fclose(stdout);
return 0;
}