#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; struct FullyIndexableDictionary{ int len, blk; vector bit; vector sum; FullyIndexableDictionary(){} FullyIndexableDictionary(int len):len(len), blk((len+31)>>5), bit(blk), sum(blk){} void set(int k){ bit[k>>5]|=1u<<(k&31); } void build(){ for(int i=1; i>5]+__builtin_popcount(bit[k>>5]&((1u<<(k&31))-1)); } int rank(bool v, int k){ return (v ? rank(k) : k-rank(k)); } }; template struct WaveletMatrix{ int len; FullyIndexableDictionary mat[MAXLOG]; int zs[MAXLOG]; WaveletMatrix(vector data){ len=data.size(); vector ls(len), rs(len); for(int dep=0; dep>(MAXLOG-(dep+1)))&1; if(k){ rs[q++]=data[i]; mat[dep].set(i); }else{ ls[p++]=data[i]; } } zs[dep]=p; mat[dep].build(); swap(ls, data); for(int i=0; i>(MAXLOG-(dep+1)))&1; l=mat[dep].rank(bit, l)+zs[dep]*bit; r=mat[dep].rank(bit, r)+zs[dep]*bit; } return r-l; } int rank(T v, int k){ return rank(v, 0, k); } T rangemin(int l, int r){ T ret=0; for(int dep=0; dep=k){ l=cntl+zs[dep]; r=cntr+zs[dep]; ret=((ret<<1)|1); }else{ l=l-cntl; r=r-cntr; ret<<=1; k-=(cntr-cntl); } } return ret; } }; int main() { int n; cin>>n; vector a(n); const int MAX=1e9; for(int i=0; i>a[i]; a[i]+=MAX; } WaveletMatrix wm(a); auto med=[&](int l, int r){ if(r-l==1) return a[l]-MAX; else if(r-l==2) return min(a[l], a[l+1])-MAX; else return wm.quantile(l, r, (r-l)/2+1)-MAX; }; ll ans=0; for(int k=1; k<=n; k++){ vector sl(n/k+1), sr(n/k+1); for(int j=0; j