0pts 求条
查看原帖
0pts 求条
1684892
Hanshaohua139楼主2025/8/2 21:43

链表の奇怪做法

记录

#include<bits/stdc++.h>
using namespace std;
int n,x,y,tot,head=-1;
int e[10010],ne[10010];
void find(int a){
	int ans=0;
	for(int i=head;i!=-1&&e[i]<a;i=ne[i],ans++);
	cout<<ans+1<<endl;
}
void pimi(int a){
	int i=head;
	for(;i!=-1&&a>1;i=ne[i]) a--;
	cout<<e[i]<<endl;
}
void last(int a){
	for(int i=head;i!=-1;i=ne[i])
		if(e[ne[i]]==a){
			cout<<e[i]<<endl;
			return;
		}
	cout<<-2147483647<<endl;
}
void next(int a){
	for(int i=head;i!=-1;i=ne[i])
		if(e[i]==a){
			cout<<e[ne[i]]<<endl;
			return;
		}
	cout<<2147483647<<endl;
}
void addi(int a){
	if(tot==0){
		e[tot]=a;ne[tot]=-1;head=tot;tot++;
		return;
	}
	if(e[head]>a){
		e[tot]=a;ne[tot]=head;head=tot;tot++;
		return;
	}
	int pre=head;
	for(int i=head;i!=-1;i=ne[i]){
		if(e[i]>a&&i!=-1){
			e[tot]=a;ne[tot]=ne[i];ne[pre]=tot;tot++;
			return;
		}
		pre=i;
	}
	e[tot]=a;ne[tot]=-1;ne[pre]=tot;tot++;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>x>>y;
		switch(x){
			case 1:find(y);break;
			case 2:pimi(y);break;
			case 3:last(y);break;
			case 4:next(y);break;
			case 5:addi(y);break;
		}
	}
	return 0;
}
2025/8/2 21:43
加载中...