#include #include #include #include #include using namespace std; #define int long long int read(){ int w=0; bool s=0; char c=getchar(); while(!isdigit(c)){ s=(c=='-'); c=getchar(); } while(isdigit(c)){ w=w*10+c-'0'; c=getchar(); } return s?-w:w; } const int N=200005,M=50; int n,m; struct Tree{ #define mid ((le+ri)>>1) #define lson le,mid,dep+1 #define rson mid+1,ri,dep+1 struct Node{ int num[N],toleft[N]; }; Node t[M]; int sorted[N]; void build(int le,int ri,int dep){ if(le==ri){ return; } int key=sorted[mid]; int equ=mid-le+1; for(int i=le;i<=ri;i++){ if(t[dep].num[i]=z){ nx=le+tl; ny=nx+del-1; return query(lson,nx,ny,z); } else{ nx=mid+1+x-tl-le; ny=nx+y-x-del; return query(rson,nx,ny,z-del); } } }; Tree T; signed main(){ n=read(),m=read(); for(int i=1;i<=n;i++){ T.t[0].num[i]=read(); T.sorted[i]=T.t[0].num[i]; } sort(T.sorted+1,T.sorted+1+n); T.build(1,n,0); int x,y,k; for(int i=1;i<=m;i++){ x=read(),y=read(),k=read(); int ans = 0; cerr << "query: "; for(int j = 1; j <= k; j ++) { ans += T.query(1,n,0,x,y,j); cerr << T.query(1,n,0,x,y,j) << ' '; } cerr << '\n'; printf("%lld\n",ans); } return 0; }