求助P7910,悬关
  • 板块灌水区
  • 楼主DragonAlan
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/18 18:36
  • 上次更新2024/10/18 20:46:31
查看原帖
求助P7910,悬关
704876
DragonAlan楼主2024/10/18 18:36
#include<bits/stdc++.h>
using namespace std;
int n,q;
struct dat{
	int p,v;
}a[200005];
int pos[200005];
int main(){
	cin >> n >> q;
	for(int i = 1;i<=n;i++){
		cin >> a[i].v;
		a[i].p=i;
	}
	for(int i = 1;i<=n;i++){
		for(int j = i;j>=2;j--){
			if(a[j].v<a[j-1].v)
				swap(a[j],a[j-1]);
		}
	}
	for(int i = 1;i<=n;i++) pos[a[i].p]=i;
	while(q--){
		int op,x;
		cin >> op >> x;
		if(op==2) cout<<pos[x]<<'\n';
		else{
			int v;
			cin >> v;
			int p = 1;
			while(a[p].p!=x) ++p;
			a[p].v=v;
			while(p>1&&(a[p].v<a[p-1].v||a[p].v==a[p-1].v&&a[p].p<a[p-1].p)){
				swap(pos[a[p].p],pos[a[p-1].p]);
				swap(a[p],a[p-1]);
				--p;
			}
			while(p<n&&(a[p].v>a[p+1].v||a[p].v==a[p+1].v&&a[p].p>a[p+1].p)){
				swap(pos[a[p].p],pos[a[p+1].p]);
				swap(a[p],a[p+1]);
				++p;
			}
		}
	}
}
2024/10/18 18:36
加载中...