为啥T了最后6个点,set不是logN的吗
查看原帖
为啥T了最后6个点,set不是logN的吗
428889
Xile楼主2023/10/3 20:34
#include<bits/stdc++.h>
using namespace std;
const int N=8e3+5;
struct sd{
	int pos,val;
	bool operator < (const sd& b) const{
		if(val==b.val) return pos<b.pos;
		return val<b.val;
	}
	bool operator == (const sd& b) const{
		return pos==b.pos&&val==b.val;
	}
}a[N];
set<sd> s;
set<sd>:: iterator it;
int get_rank(sd x){
	it=s.find(x);
	return distance(s.begin(),it)+1;
}
int n,q;
int main(){
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i].val);
		a[i].pos=i;
		s.insert(a[i]);
	}
	while(q--){
		int op,x,v;
		scanf("%d",&op);
		switch(op){
		case 1:
			scanf("%d%d",&x,&v);
			s.erase(a[x]);
			a[x].val=v;
			s.insert(a[x]);
			break;
		default:
			scanf("%d",&x);
			int ans=get_rank(a[x]);
			printf("%d\n",ans);
		}
	}
	return 0;
}
2023/10/3 20:34
加载中...