看题目后 不会呀数据结构 (巨佬队友说是主席树的板子题
果断向他学习了一下 下面是我的学习理解
主席树相当于线段树1-1,1-2,1-n的前缀和 于是这样就可以用来维护区间信息
将 l-r变为 1-l 1-r的减法
套上板子 这题维护的信息是区间的名次

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,m;
int a[maxn];
vector<int>v[maxn<<2];
vector<int>::iterator it;
void build(int id,int l,int r)
{
    v[id].clear();
    for(int i=l;i<=r;++i) v[id].push_back(a[i]);
    sort(v[id].begin(),v[id].end());
    if(l==r) return;
    int mid=(l+r)>>1;
    build(id<<1,l,mid);
    build(id<<1|1,mid+1,r);
}
int query(int id,int L,int R,int l,int r,int h)
{
    if(l<=L&&R<=r)
    {
        it=upper_bound(v[id].begin(),v[id].end(),h);
        return it-v[id].begin();
    }
    int mid=(L+R)>>1;
    int ans=0;
    if(l<=mid) ans+=query(id<<1,L,mid,l,r,h);
    if(mid<r) ans+=query(id<<1|1,mid+1,R,l,r,h);
    return ans;
}
int main()
{
    int T,t=1;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i) scanf("%d",&a[i]);
    build(1,1,n);
    int l,r,h;
    while(m--)
    {
        scanf("%d%d%d",&l,&r,&h);
        printf("%d\n",query(1,1,n,l,r,h));
    }
    return 0;
}