#include #define rep(i,n)for(int i=0;i<(n);i++) using namespace std; typedef long long ll; typedef pairP; const int MOD=1000000007; const int INF=0x3f3f3f3f; const ll INFL=0x3f3f3f3f3f3f3f3f; int a[200000]; int idx[200000]; const int N=(1<<17); vectordat[2*N]; void init(int k, int l, int r) { if (r - l == 1) { dat[k].push_back(idx[l]); return; } int lb = k * 2 + 1, rb = k * 2 + 2; init(lb, l, (l + r) / 2); init(rb, (l + r) / 2, r); dat[k].resize(r - l); merge(dat[lb].begin(), dat[lb].end(), dat[rb].begin(), dat[rb].end(), dat[k].begin()); } int query(int a, int b, int c, int d, int k, int l, int r) { if (b <= l || r <= a)return 0; if (a <= l&&r <= b) { int u = lower_bound(dat[k].begin(), dat[k].end(), d) - dat[k].begin(); int v = lower_bound(dat[k].begin(), dat[k].end(), c) - dat[k].begin(); return u - v; } int lb = query(a, b, c, d, k * 2 + 1, l, (l + r) / 2); int rb = query(a, b, c, d, k * 2 + 2, (l + r) / 2, r); return lb + rb; } int main(){ int n,q;cin>>n>>q; stack

st; rep(i,n){ scanf("%d",&a[i]); while(!st.empty()&&st.top().first