第一段代码全WA,第二段改用vector就AC,有无大佬能解释一下原因?
查看原帖
第一段代码全WA,第二段改用vector就AC,有无大佬能解释一下原因?
1204870
sonicchen楼主2025/7/22 15:56
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;i++)
const int maxn=2e6+5;
int a[maxn];
int n;
int K[maxn];
vector<int> R[maxn];
int tree[maxn];
int lb(int x){
	return x&-x;
}
void add(int x,int y){
	while(x<=maxn){
		tree[x]+=y;
		x+=lb(x);
	}
}
int qry(int x){
		int an=0;
		while(x){
			an+=tree[x];
			x-=lb(x);
	}
	return an;
}
int ans[maxn];
int main(){
	int m;
	int l,r,k;
	scanf("%d%d",&n,&m);
	rep(i,1,n){
		scanf("%d",&a[i]);
	}
	rep(i,1,m){
		scanf("%d%d%d",&l,&r,&k);
		R[l-1].push_back(-i);
		R[r].push_back(i);
		K[i]=k;
	}
	rep(i,1,n){
		add(a[i],1);
		for(int j=0;j<R[i].size();j++){
			if(R[i][j]>0)
				ans[R[i][j]]+=qry(K[R[i][j]]);
			else
				ans[-R[i][j]]-=qry(K[R[i][j]]);
		}
	}
	rep(i,1,m)
		printf("%d\n",ans[i]);
}
	#include<bits/stdc++.h>
	using namespace std;
	#define rep(i,a,b) for(int i=a;i<=b;i++)
	const int maxn=2e6+5;
	int a[maxn];
	int n;
	struct node{
		int x,id;
	};
	vector<node> R[maxn];
	int tree[maxn];
	int lb(int x){
		return x&-x;
	}
	void add(int x,int y){
		while(x<=maxn){
			tree[x]+=y;
			x+=lb(x);
		}
	}
	int qry(int x){
			int an=0;
			while(x){
				an+=tree[x];
				x-=lb(x);
		}
		return an;
	}
	int ans[maxn];
	int main(){
		int m;
		int l,r,k;
		scanf("%d%d",&n,&m);
		rep(i,1,n){
			scanf("%d",&a[i]);
		}
		rep(i,1,m){
			scanf("%d%d%d",&l,&r,&k);
			R[l-1].push_back({k,-i});
			R[r].push_back({k,i});
		}
		rep(i,1,n){
			add(a[i],1);
			for(node j:R[i]){
				if(j.id>0)
					ans[j.id]+=qry(j.x);
				else
					ans[-j.id]-=qry(j.x);
			}
		}
		rep(i,1,m)
			printf("%d\n",ans[i]);
	}
2025/7/22 15:56
加载中...