求助,站外题被卡常
  • 板块学术版
  • 楼主__11jiang08__
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/11/20 13:12
  • 上次更新2023/10/27 02:14:28
查看原帖
求助,站外题被卡常
737038
__11jiang08__楼主2022/11/20 13:12
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
int n,q,x[10009];
map<int,int> pos;
map<int,int> lst;
map<int,int> nxt;
int main(){
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++)  scanf("%d",&x[i]);
	x[0]=x[n+1]=-1;
	for(int i=1;i<=n;i++){
		pos[x[i]]=i;
		lst[x[i]]=x[i-1];
		nxt[x[i]]=x[i+1];
	}
	for(int i=1;i<=q;i++){
		char op[10];
		int num;
		scanf("%s",op);
		scanf("%d",&num);
		if(op[0]=='l')  printf("%d\n",lst[num]);
		else if(op[0]=='n')  printf("%d\n",nxt[num]);
		else  printf("%d\n",pos[num]);
	}
	return 0;
}

题目描述

给定一个长度为 nn 的数列 AA,共 qq 次询问,询问共有以下几种可能。

  • next x 询问 xx 的下一个数,若不存在则输出 -1
  • find x 询问 xx 的的位置,即下标。
  • last x 询问 xx 的上一个数,若不存在则输出 -1

请使用 scanfprintf

输入格式

第一行两个数 nnqq
接下来 nn 行,每行一个数,表示数列 AA
接下来 qq 行,每行一个询问。

输出格式

qq 行,每行一个回答。

样例 #1

样例输入 #1

10 6
15538464
13113120
85191840
33712000
78517152
3277868
13486336
42383105
75222000
8097610
next 15538464
next 42383105
next 75222000
next 33712000
last 15538464
last 13486336

样例输出 #1

13113120
75222000
8097610
78517152
-1
3277868

样例 #2

样例输入 #2

10 3
68295042
4493695
49152422
12199264
19215200
45180343
8882610
27564128
35466564
66708846
find 68295042
last 8882610
next 4493695

样例输出 #2

1
45180343
49152422

提示

对于 100%100\% 的数据,保证 1n100001\le n\le100001q10000001\le q\le1000000xAx\in A0Ai1000000000\le A_i\le100000000,且每个 AiA_i 的值唯一,不存在重复的情况。

2022/11/20 13:12
加载中...