#include<bits/stdc++.h>
using namespace std;
namespace acac
{
unordered_map<int,int>mp;
int tree[8000010];
int n,m,sum,tot;
int lowbit(int x)
{
return x&(-x);
}
void c(int x,int num)
{
for(int i=x;i<=tot;i+=lowbit(i))
{
tree[i]+=num;
}
}
int q(int x)
{
int ans=0;
for(int i=x;i;i-=lowbit(i))
{
ans+=tree[i];
}
return ans;
}
int ls[8000010],Ans[8000010];
int cnt=0;
struct node
{
int x,y,y2,op;
}A[8000010];
bool cmp(node a,node b)
{
if(a.x==b.x)return a.op<b.op;
return a.x<b.x;
}
int read()
{
char ch=getchar();
int ans=0;
while(ch<'0'||ch>'9')
{
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
ans=ans*10+ch-'0';
ch=getchar();
}
return ans;
}
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
{
A[i].y=read();
A[i].x=i;
A[i].op=0;
ls[++cnt]=A[i].y;
}
sum=n;
for(int i=1;i<=m;i++)
{
A[n+i].x=read(),A[n+m+i].x=read(),A[n+m+i].y2=read();
A[n+i].y=1;
A[i+n].x--;
A[i+n].op=i;
A[i+n+m].op=i+m;
A[n+i].y=A[i+m+n].y=A[i+n].y-1;
A[n+i].y2=A[i+m+n].y2=A[i+n+m].y2;
sum+=2;
// ls[++cnt]=A[i+n].y;
ls[++cnt]=A[i+n+m].y2;
// cout<<i+m+n<<' '<<sum<<endl;
}
ls[++cnt]=1;
sort(ls+1,ls+1+cnt);
ls[0]=-1;
for(int i=1;i<=cnt;i++)
{
if(ls[i]!=ls[i-1])tot++;
mp[ls[i]]=tot;
}
sort(A+1,A+1+sum,cmp);
for(int i=1;i<=sum;i++)
{
// if(A[i].op==22||A[i].op-m==22)cout<<A[i].op<<' '<<q(mp[A[i].y])<<endl;
if(!A[i].op)c(mp[A[i].y],1);
else if(A[i].op<=m)Ans[A[i].op]-=q(mp[A[i].y2]);
else Ans[A[i].op-m]+=q(mp[A[i].y2]);
}
for(int i=1;i<=m;i++)
{
cout<<Ans[i]<<'\n';
}
return 0;
}
}
int main()
{
// freopen("data.in","r",stdin);
acac::main();
return 0;
}
从园丁的烦恼搬过来的,不知道为啥一直Tle on #5 (