# 求助
查看原帖
# 求助
371082
God__Me楼主2022/10/18 23:34
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
using namespace std;
int n,m,op,x,y;
struct node{
	int sum,next;
}a[8005];
struct body{
	int sum,head;
}b[8005],k;
bool check(body p,body q){
	if (p.sum!=q.sum)return p.sum<q.sum;
	return p.head<q.head;
}
int main(){
	scanf ("%d %d",&n,&m);
	for (int i=1;i<=n;i++){
		scanf ("%d",&a[i].sum);
		a[i].next=i;
		b[i].sum=a[i].sum;
		b[i].head=i;
	}
	for (int i=1;i<=n;i++)
	for (int j=i;j>=2;j--)
		if (b[j].sum<b[j-1].sum){
			k=b[j];
			a[b[j-1].head].next=j;
			a[b[j].head].next=j-1;
			b[j].sum=b[j-1].sum;
			b[j].head=b[j-1].head;
			b[j-1].sum=k.sum;
			b[j-1].head=k.head;
		}
	for (int i=1;i<=m;i++){
		scanf ("%d",&op);
		if (op==1){
			scanf ("%d %d",&x,&y);
			a[x].sum=y;b[a[x].next].sum=y;
			for (int j=n;j>=1;j--)
				if (check(b[j],b[j-1])){
					k=b[j];
					a[b[j-1].head].next=j;
					a[b[j].head].next=j-1;
					b[j].sum=b[j-1].sum;
					b[j].head=b[j-1].head;
					b[j-1].sum=k.sum;
					b[j-1].head=k.head;
				}
			for (int j=1;j<=n;j++)
				if (check(b[j+1],b[j])){
					k=b[j];
					a[b[j+1].head].next=j;
					a[b[j].head].next=j+1;
					b[j].sum=b[j+1].sum;
					b[j].head=b[j+1].head;
					b[j+1].sum=k.sum;
					b[j+1].head=k.head;
				}
		}
		else{
			scanf ("%d",&x);
			printf ("%d\n",a[x].next);
		}
	}
	return 0;
}
2022/10/18 23:34
加载中...