#include #include #include #include using namespace std; const int N = 100010; struct dit{ int num,id; }dd[N]; struct ask{ int lp,rp,value,id; }aa[N]; int cnt[N]; bool cmp1(dit a,dit b){ return a.num < b.num; } bool cmp2(ask a,ask b){ return a.value < b.value; } int inline lowbit(int x){ return x & (-x); } void inline update(int x){ while(x < N){ cnt[x]++; x += lowbit(x); } } int inline sum(int x){ int s = 0; while(x > 0){ s += cnt[x]; x -= lowbit(x); } return s; } int main(){ int numcase; scanf("%d",&numcase); for(int ca = 1; ca <= numcase; ++ca){ int n,m; memset(cnt,0,sizeof(cnt)); scanf("%d%d",&n,&m); for(int i = 0; i < n; ++i){ scanf("%d",&dd[i].num); dd[i].id = i + 1; } int x,y; for(int i = 0; i < m; ++i){ scanf("%d%d%d",&x,&y,&aa[i].value); aa[i].lp = x + 1; aa[i].rp = y + 1; aa[i].id = i + 1; } sort(dd,dd+n,cmp1); sort(aa,aa+m,cmp2); int ans[N] = {0}; for(int aski = 0,ditj = 0; aski < m; ++aski){ while(ditj < n && aa[aski].value >= dd[ditj].num){ update(dd[ditj].id); ditj++; } ans[aa[aski].id] = sum(aa[aski].rp) - sum(aa[aski].lp - 1); } printf("Case %d:\n",ca); for(int i = 1; i <= m; ++i){ printf("%d\n",ans[i]); } } return 0; }