关于我的史山代码在洛谷100但在别的OJ只有76
查看原帖
关于我的史山代码在洛谷100但在别的OJ只有76
928342
26946z2111楼主2024/10/9 22:44
#include<bits/stdc++.h>
using namespace std;
int n,q,a[8080],c[8080];
struct node{
	int num,id;
}b[8080];
bool cmp(node x,node y){
	if(x.num==y.num)return x.id<y.id;
	return x.num<y.num;
}
void sor(){
	for(int i=1;i<=n;i++){
		b[i].num=a[i];
		b[i].id=i;
	}
	sort(b+1,b+n+1,cmp);
	for(int i=1;i<=n;i++){
		c[b[i].id]=i;
	}
}
int main(){
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	sor();
	b[0].num=-1;
	b[n+1].num=0x3f3f3f3f;
	for(int i=1;i<=q;i++){
		int x;
		scanf("%d",&x);
		if(x==1){
			int y,z;
			scanf("%d%d",&y,&z);
			a[y]=z;
			b[c[y]].num=z;
			if(b[c[y]].num>=b[c[y]+1].num){
				for(int j=c[y]+1;j<=n;j++){
					if(b[j-1].num>b[j].num){
						swap(c[b[j-1].id],c[b[j].id]);
						swap(b[j-1],b[j]);
					}
					else if(b[j-1].num==b[j].num&&b[j-1].id>b[j].id){
						swap(c[b[j-1].id],c[b[j].id]);
						swap(b[j-1].id,b[j].id);
					}
					else break;
				}
			}
			else if(b[c[y]].num<=b[c[y]-1].num){
				for(int j=c[y]-1;j>=1;j--){
					if(b[j+1].num<b[j].num){
						swap(c[b[j+1].id],c[b[j].id]);
						swap(b[j+1],b[j]);
					}
					else if(b[j+1].num==b[j].num&&b[j+1].id<b[j].id){
						swap(c[b[j+1].id],c[b[j].id]);
						swap(b[j+1].id,b[j].id);
					}
					else break;
				}
			}
		}
		else if(x==2){
			int y;
			scanf("%d",&y);
			cout<<c[y]<<endl;
		}
	}
	return 0;
}
2024/10/9 22:44
加载中...