#include #include #include using namespace std; const int B=330; const int MAXN=100010; //const int MAXN=100; int N; int p[MAXN]; int MAX[MAXN/B],MIN[MAXN/B],CR[MAXN/B][MAXN],CL[MAXN/B][MAXN]; void calc(const vector&A,int ans[MAXN]) { for(int i=0;iA[i]) { cummin=A[i]; ans[A[i]]=-now; now++; } } for(int i=1;i>N; for(int i=0;i>p[i]; for(int i=0;i+B<=N;i+=B) { vectorA(p+i,p+i+B); int id=i/B; calc(A,CR[id]); reverse(A.begin(),A.end()); calc(A,CL[id]); MAX[id]=MIN[id]=A[0]; for(int a:A) { if(MAX[id]a)MIN[id]=a; } } long ans=0; for(int i=0;i=B) { int id=l/B-1; if(MAX[id]MIN[id])LM=MIN[id]; l-=B; } else break; } while(l>0) { l--; if(p[l]MIN[id])RM=MIN[id]; r+=B; } else break; } while(r