求改
查看原帖
求改
490651
zcy942楼主2023/4/22 16:34
#include <iostream>
#include <cstdio>
#include <cmath> 
using namespace std;


long long a[10010],b[10010],c[10010],d[10010];

int main(){
//	freopen("sort.in","r",stdin);
//	freopen("sort.out","w",stdout);
	
	long long n,Q;
	scanf("%lld%lld",&n,&Q);
	for(long long i=1;i<=n;i++) scanf("%lld",&a[i]),b[i]=a[i],c[i]=i;
	for(long long i=2;i<=n;i++){
		for(long long j=i;j>1;j--) if(b[j]<b[j-1]){
			swap(b[j],b[j-1]);
			swap(c[j],c[j-1]);
		}
	}
	for(long long i=1;i<=n;i++) d[c[i]]=i;
//	for(long long i=1;i<=n;i++) printf("a[%d]=%d b[%d]=%d c[%d]=%d d[%d]=%d\n",i,a[i],i,b[i],i,c[i],i,d[i]);
	while(Q--){
		long long l;
		scanf("%lld",&l);
		if(l==1){
			long long x,v;
			scanf("%lld%lld",&x,&v);
			a[x]=v,b[d[x]]=v;
			while((b[d[x]]>b[d[x]+1] || (b[d[x]]==b[d[x]+1] && x>c[d[x]+1])) && d[x]+1<=n){
				swap(b[d[x]],b[d[x]+1]);
				d[c[d[x]+1]]--;
				swap(c[d[x]],c[d[x]+1]);
				d[x]++;
			}
			while((b[d[x]]<b[d[x]-1] || (b[d[x]]==b[d[x]-1] && x<c[d[x]+1])) && d[x]-1>0){
				swap(b[d[x]],b[d[x]+1]);
				d[c[d[x]+1]]++;
				swap(c[d[x]],c[d[x]+1]);
				d[x]--;
			}
//			for(long long i=1;i<=n;i++) printf("a[%d]=%d b[%d]=%d c[%d]=%d d[%d]=%d\n",i,a[i],i,b[i],i,c[i],i,d[i]);
		}
		else{
			long long x;
			scanf("%lld",&x);
			printf("%lld\n",d[x]);
		}
	}
	
	return 0;
}
/*
3 4
3 2 1
2 3
1 3 2
2 2
2 3
*/
2023/4/22 16:34
加载中...