Rt,除了hack以外全TLE
#include<bits/stdc++.h>
#define ll long long
#define N 200005
#define Inf 1000000000
#define lb(x) ((x)&-(x))
using namespace std;
int n,m;
struct Wood{
int l,r,s;
}q[N],ql[N],qr[N];
int t1,t2;
int sht[N];
int ans[N];
int tr[N];
inline void add(int u,int p) {for(;u<=N-5;u+=lb(u)) tr[u]+=p;}
inline int query(int u){
int res=0;
for(;u;u-=lb(u)) res+=tr[u];
return res;
}
void solve(int l,int r,int lq,int rq){
if(l>r||lq>rq) return ;
if(l==r){
for(int i=lq;i<=rq;i++)
if(q[i].s==1&&q[i].l<=sht[l]&&sht[l]<=q[i].r) ans[l]++;
return ;
}
int mid=l+r>>1;
for(int i=l;i<=mid;i++) add(sht[i],1);
t1=t2=0;
for(int i=lq,s;i<=rq;i++){
s=query(q[i].r)-query(q[i].l-1);
if(s>=q[i].s) ql[++t1]=q[i];
else q[i].s-=s,qr[++t2]=q[i];
}
for(int i=l;i<=mid;i++) add(sht[i],-1);
for(int i=1;i<=t1;i++) q[lq+i-1]=ql[i];
for(int i=1;i<=t2;i++) q[lq+t1+i-1]=qr[i];
solve(l,mid,lq,lq+t1-1);
solve(mid+1,r,lq+t1,rq);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d%d%d",&q[i].l,&q[i].r,&q[i].s);
for(int i=1;i<=m;i++)
scanf("%d",&sht[i]);
solve(1,m,1,n);
for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
return 0;
}