20123 两数以外的最大值

题目描述

现在告诉你一个长为 的序列

给出 组询问,每组询问给出 ,表示询问这个序列中除去 之外的最大值。

输入格式

第一行两个整数 ,表示序列中的元素数量和询问数量。

接下来一行 个数,表示序列

接着 行,每行两个整数 ,含义如题意所述

输出格式

输出共 行,表示每一个询问的答案。

样例

Input #1

5 3
1 5 2 4 3
2 4
2 5
1 3

Output #1

3
4
5
数据范围与提示

样例解释

初始的 序列为

对于询问

  1. 序列中除掉 后留下 ,最大值为
  2. 序列中除掉 后留下 ,最大值为
  3. 序列中除掉 后留下 ,最大值为

数据范围




无特殊限制。

对于 的数据,有

分类标签

[枚举]

C++题解代码

#include <bits/stdc++.h>
using namespace std;

int a;
int b;
int c;
int e;
int f;
int d[2][4];


// The main procedure
int main() {
  cin>>a;
  cin>>b;
  for (int i = 1; i <= a; i++) {
    cin>>c;
    for (int j = 3; j > 0; j--) {
      if (c > d[0][j]) {
        for (int k = 1; k < j; k++) {
          d[0][k] = d[0][(k+1)];
          d[1][k] = d[1][(k+1)];
        }
        d[0][j] = c;
        d[1][j] = i;
        break;
      }
    }
  }
  for (int i = 1; i <= b; i++) {
    cin>>e;
    cin>>f;
    for (int j = 3; j > 0; j--) {
      if ((d[1][j] != e) && (d[1][j] != f)) {
        cout<<d[0][j];
        break;
      }
    }
    if (i < b) {
      cout<<'\n';
    }
  }
  return 0;
}

Blockly题解代码图片