TLE 20 求调
查看原帖
TLE 20 求调
544647
linmou楼主2024/11/29 16:54


#include<bits/stdc++.h>

using namespace std;

#define maxn 2000005

int _n,_m,_sum[maxn],_ans[maxn];
struct pp{
	int l,r,w,ans,bh;
}_qr[maxn];
struct ppp{
	int w,x;
}_num[maxn];
bool cmp1(pp a,pp b){
	return a.w < b.w;
}
bool cmp2(pp a,pp b){
	return a.bh < b.bh;
}
bool cmp(ppp a,ppp b){
	return a.w < b.w;
}
int lobit(int x){
	return x&-x;
}

void add(int x){
	for(int i = x;i<maxn;i+=lobit(i))_sum[i]++;
}

int qr(int x){
	int sum = 0;
	for(int i = x;i>0;i-=lobit(i))sum+=_sum[i];
	return sum;
}

inline void read(int& a)
{
	int s = 0;
	char ch = getchar();
	while (ch < '0' || ch>'9')
	{
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9')
	{
		s = s * 10 + ch - '0';
		ch = getchar();
	}
	a=s;
}

int main(){
	read(_n);
	read(_m);
	for(int i = 1;i <= _n;i++){
		read(_num[i].w);
		_num[i].x=i;
	}
	sort(_num+1,_num+1+_n,cmp);
	for(int i = 1;i <= _m;i++){
		read(_qr[i].l);read(_qr[i].r);read(_qr[i].w);
		_qr[i].bh=i;
	}
	sort(_qr+1,_qr+1+_m,cmp1);
	int rr = 0;
	for(int i = 1;i <= _m;i++){
		while(_num[rr+1].w <= _qr[i].w){
			rr++;
			add(_num[rr].x);
		}
		_ans[_qr[i].bh]=qr(_qr[i].r)-qr(_qr[i].l-1);
	}
	for(int i = 1;i <= _m;i++){
		printf("%d\n",_ans[i]);
	}
}
2024/11/29 16:54
加载中...