0pts 请大佬帮忙,谢谢。
查看原帖
0pts 请大佬帮忙,谢谢。
726902
bcbgszyzh楼主2023/10/26 18:41

code:(cpp17 -o2)

#include<bits/stdc++.h>
using namespace std;
struct stu{
	int di,id;
}s[8010];
int a[8010],e[8010];
int main(){
	int n,Q;
	scanf("%d%d",&n,&Q);
	for(int i=1;i<=n;++i)scanf("%d",&a[i]);
	for(int i=1;i<=n;++i)s[i].di=a[i],s[i].id=i;
	for(int i=1;i<=n;i++)
		for(int j=i;j>=2;j--)
			if(s[j].di<s[j-1].di) {
				swap(s[j],s[j-1]);
			}
	for(int i=1;i<=n;++i)e[s[i].id]=i;
	for(int j=1;j<=Q;++j){
		int op;
		scanf("%d",&op);
		if(op==2){
			int x;
			scanf("%d",&x);
			printf("%d\n",e[x]);
		}else{
			int x,c;
			scanf("%d%d",&x,&c);
			if(a[x]<c){
				s[e[x]].di=c;
				for(int i=e[x]+1;i<=n;++i){
					if(s[e[x]+1].di<s[e[x]].di){
						swap(e[x],e[s[e[x]+1].id]);
						swap(e[s[e[x]].id],e[s[e[x]+1].id]);
					}else if(s[e[x]+1].di==s[e[x]].di&&s[e[x]+1].id<s[e[x]].id){
						swap(e[x],e[s[e[x]+1].id]);
						swap(e[s[e[x]].id],e[s[e[x]+1].id]);
					}else break;
				}
			}else{
				for(int i=e[x]-1;i>0;--i){
					s[e[x]].di=c;
					if(s[e[x]+1].di>s[e[x]].di){
						swap(e[x],e[s[e[x]+1].id]);
						swap(s[e[x]],s[e[x]-1]);
					}else if(s[e[x]-1].di==s[e[x]].di&&s[e[x]-1].id>s[e[x]].id){
						swap(e[x],e[s[e[x]-1].id]);
						swap(s[e[x]],s[e[x]-1]);
						
					}else break;
				}
			}
		}
	}
	return 0;
}
2023/10/26 18:41
加载中...