为什么TLE40pts
查看原帖
为什么TLE40pts
643818
I_AK_CTSC楼主2024/11/22 14:11
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+5;
int n,m,a[N],cnt=0,ans[N];
int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^'0'),ch=getchar();
	return x*f;
}
void write(int x){
	if(x<0) x=-x,putchar('-');
	if(x>=10) write(x/10);
	putchar(x%10+'0');
}
struct query{
	int id,r,x,flag;
} q[N<<1];
bool cmp(query x,query y){
	return x.r<y.r;
}
template<typename TT>
class BIT{
	int T[N];
	int lowbit(int x){
		return x&-x;
	}
public:
	void upd(int x,int k){
		for(;x<=N-5;x+=lowbit(x))
			T[x]+=k;
	}
	int query(int x){
		int res=0;
		for(;x;x-=lowbit(x)) res+=T[x];
		return res;
	} 
};
BIT<int> T;
int main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++) a[i]=read();
	for(int i=1;i<=m;i++){
		int l,r,x;l=read(),r=read(),x=read();
		q[++cnt].r=l-1,q[cnt].id=i,q[cnt].flag=0,q[cnt].x=x;
		q[++cnt].r=r,q[cnt].id=i,q[cnt].flag=1,q[cnt].x=x;
	}
	for(int i=1;i<=cnt;i++){
		for(int j=q[i-1].r+1;j<=q[i].r;j++)
			T.upd(a[j],1);
		if(!q[i].flag) ans[q[i].id]=-T.query(q[i].x);
		else ans[q[i].id]+=T.query(q[i].x);
	}
	for(int i=1;i<=m;i++) write(ans[i]),puts("");
	return 0;
}
2024/11/22 14:11
加载中...