为啥要前后各扫一遍
查看原帖
为啥要前后各扫一遍
241817
Chancylaser楼主2021/11/3 21:50
#include<bits/stdc++.h>
using namespace std;
int n,q;
int t[8005]; 
int chk,x,v;
struct numb{
	int a,i;
}e[8005];
bool cmp(numb x,numb y){
	if(x.a!=y.a) return x.a<y.a;
	return x.i<y.i;
}
int main(){
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++)
		scanf("%d",&e[i].a),e[i].i=i;
	sort(e+1,e+n+1,cmp);
	for(int i=1;i<=n;i++) t[e[i].i]=i;
	for(int k=1;k<=q;k++){
		scanf("%d",&chk);
		if(chk==1){
			scanf("%d%d",&x,&v);
			e[t[x]].a=v;
			for(int i=2;i<=n;i++)
				if(cmp(e[i],e[i-1]))
					swap(e[i],e[i-1]);							
			for(int i=n;i>=2;i--)
				if(cmp(e[i],e[i-1]))
					swap(e[i],e[i-1]);
			for(int i=1;i<=n;i++)
				t[e[i].i]=i;
		}
		if(chk==2){
			scanf("%d",&x);
			printf("%d\n",t[x]);
		}
	}
	return 0;
}

为啥需要前后各扫一遍才能过,我的解法和第一篇题解差不多

2021/11/3 21:50
加载中...