12分,求调
查看原帖
12分,求调
1099936
zitong_cherry楼主2023/10/16 13:22

悬关

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,q,a[8010],flag=1,ca[8010],head;
struct node{
	int zhi,wei;
}b[8010];
bool cmp(node x,node y){
	if(x.zhi==y.zhi){
		return x.wei<y.wei;
	}
	return x.zhi<y.zhi;
}
signed main(){
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i].zhi=a[i];
		b[i].wei=i;
	}
	sort(b+1,b+n+1,cmp);
	for(int i=1;i<=n;i++){
		ca[b[i].wei]=i;
	}
	while(q--){
		int c,x,v;
		cin>>c;
		if(c==1){
			int key;
			cin>>x>>v;
			for(int i=1;i<=n;i++){
				if(b[i].wei==x){
					b[i].zhi=v;
					key=i;
					break;
				}
			}
			if(v<b[1].zhi||v==b[1].zhi&&b[key].wei<b[1].wei){
				node tmp=b[1];
				b[1]=b[key];
				ca[b[key].wei]=1;
				for(int j=key-1;j>=2;j--){
					b[j+1]=b[j];
					ca[b[j].wei]++;
				}
				b[2]=tmp;
				ca[tmp.wei]=2;
				continue;
			}
			else if(v>b[n].zhi||v==b[n].zhi&&b[key].wei>b[n].wei){
				node tmp=b[n];
				b[n]=b[key];
				ca[b[key].wei]=n;
				for(int j=key+1;j<=n-1;j++){
					b[j-1]=b[j];
					ca[b[j].wei]--;
				}
				b[n-1]=tmp;
				ca[tmp.wei]=n-1;
				continue;
			}
			else if(b[key].zhi>b[key+1].zhi||b[key].zhi==b[key+1].zhi&&b[key].wei>b[key+1].wei)
				for(int i=key+1;i<=n;i++){
					if(b[i].zhi>b[key].zhi||b[i].zhi==b[key].zhi&&b[i].wei<b[key].wei){
						node tmp=b[i-1];
						b[i-1]=b[key];
						ca[b[key].wei]=i-1;
						for(int j=i-1;j>=key+1;j--){
							if(j!=i-1)
								b[j-1]=b[j];
							else
								b[i-2]=tmp;
							ca[b[j-1].wei]--;
						}
						break;
					}
				}
			else if(b[key].zhi<b[key-1].zhi||b[key].zhi==b[key-1].zhi&&b[key].wei<b[key-1].wei)
				for(int i=key-1;i>=1;i--){
					if(b[i].zhi<b[key].zhi||b[i].zhi==b[key].zhi&&b[i].wei>b[key].wei){
						node tmp=b[i+1];
						b[i+1]=b[key];
						ca[b[key].wei]=i+1;
						for(int j=key;j>=i+2;j--){
							if(j!=i+2)
								b[j]=b[j-1];
							else
								b[i+2]=tmp;
							ca[b[j].wei]++;
						}
						break;
					}
				}
			for(int i=1;i<=n;i++){
				ca[b[i].wei]=i;
			}
		}
		else{
			cin>>x;
			cout<<ca[x]<<endl;
		}
	}
}
2023/10/16 13:22
加载中...