0分求调
查看原帖
0分求调
1054060
Zyx0094楼主2024/7/11 10:15
#include<bits/stdc++.h>
using namespace std;
int n;
struct AB{
	int s,id;
}a[8003],b[8003];
bool cmp(AB x,AB y){
	if(x.s!=y.s)
		return x.s<y.s;
	return x.id<y.id;
}
int main(){
	
	//freopen("sort1.in","r",stdin);
	int q,i;
	scanf("%d%d",&n,&q);
	for(i=1;i<=n;i++){
		scanf("%d",&a[i].s);
		b[i].s=a[i].s;
		b[i].id=i;
	}
	sort(b+1,b+n+1,cmp);
	for(i=1;i<=n;i++)
		a[b[i].id].id=i;
	int w,u,v;
	while(q--){
		scanf("%d%d",&w,&u);
		if(w==1){
			scanf("%d",&v);
			a[u].s=v;
			b[a[u].id].s=v;
			int k=u;
			while(a[k].id<=n&&a[k].id>=1){
				if(b[a[k].id].s<b[a[k].id-1].s&&a[k].id!=1||b[a[k].id].s==b[a[k].id-1].s&&b[a[k].id].id<b[a[k].id-1].id&&a[k].id!=1){
					int c=a[k].id;
					AB t;
					swap(a[k].id,a[b[a[k].id-1].id].id);
					t=b[c];
					b[c]=b[c-1];
					b[c-1]=t;
					k--;
				}
				else if(b[a[k].id].s>b[a[k].id+1].s&&a[k].id!=n||b[a[k].id].s==b[a[k].id+1].s&&b[a[k].id].id>b[a[k].id+1].id&&a[k].id!=n){
					int c=a[k].id;
					AB t;
					swap(a[k].id,a[b[a[k].id+1].id].id);
					t=b[c];
					b[c]=b[c+1];
					b[c+1]=t;
					k++;
				}
				else
					break;
			}
		}
		else
			printf("%d\n",a[u].id);
	}
	
	return 0;
} 

过了题目的样例1和样例2,调了好多遍,不知道错哪了

2024/7/11 10:15
加载中...