求助站外题(模拟)
  • 板块题目总版
  • 楼主liweiheng22
  • 当前回复10
  • 已保存回复10
  • 发布时间2022/10/22 17:05
  • 上次更新2023/10/27 06:29:22
查看原帖
求助站外题(模拟)
539591
liweiheng22楼主2022/10/22 17:05

时间限制 1000ms 内存限制 256MB

题目

描述

最初有一个长度为 n 的数列,第 i 个数为 a_ia i ​ 。现在小榔对数列进行了 q 次操作,对于每次操作:

1)向数列中添加一个数 x。

2)询问数列重排序后第一个大于 x 的数是什么,如果没有,则输出 -1。

输入

输入文件名为sequence.in。

第一行输入一个正整数 n,代表最初数列的长度。

第二行输入 n 个非负整数,第 i个数为 a_ia i ​ ,两个数以空格隔开。

接下来输入一个正整数 q,表示小榔操作的次数。

接下来 q 行,每行两个以空格隔开的整数 op x:

1)若 op == 1,表示向数列中添加一个非负整数 x;

2)若 op == 2,表示询问数列中第一个大于 x 的数是什么。

输出

输出文件名为sequence.out。

对于所有 op == 2 的询问,输出此时数列中第一个大于 x 的数是什么,如果没有,则输出 -1。

输入样例 1

5

1 2 3 4 5

3

1 2

2 2

2 5

输出样例1

3

-1

输入样例 2

5

1 4 7 5 10

5

1 2

2 2

2 10

1 12

2 10

输出样例2

4

-1

12

【数据范围】

对于 20% 的数据,1⩽n,q⩽100 , 1⩽n,q⩽100;

对于另外 30% 的数据,1⩽ n ⩽2000 , 1⩽q⩽10^5 ,其中 op == 1 的次数⩽2000。

对于 100% 的数据 , 1⩽ n,q⩽ 10^5, 0⩽a[i],x⩽ 10^9 , 1⩽op ⩽21⩽n,q⩽10^5 , 0⩽a[i],x⩽10^9 , 1⩽op⩽2。

代码

#include<bits/stdc++.h>
using namespace std;
struct Node{
  long long opp,x;
}op[100005]={0};
int main(){
  freopen("sequence.in","r",stdin);
  freopen("sequence.out","w",stdout);
  long long n,q;
  long long a[100005]={0};
  cin>>n;
  for(long long i=0;i<n;i++){
      cin>>a[i];
  }
  cin>>q;
  for(long long i=0;i<q;i++){
      cin>>op[i].opp>>op[i].x;
      if(op[i].opp==1){
          n=n+1;
          a[n]=op[i].x;
          sort(a,a+n);
      }else{
          int flag=0;
          for(int j=0;j<n;j++){
              if(a[i]>op[i].x){
                  if(flag==0){
                  	cout<<a[i]<<endl;
                  	flag=1;
                  }
              }
          }
          if(flag==0){
              cout<<"-1"<<endl;
          }
      }
  }
  return 0;
}

如果有大佬发现错在哪里 ,请在评论区告知。

Thanks.

2022/10/22 17:05
加载中...