不知道哪里错了(模拟题)求助
  • 板块学术版
  • 楼主liweiheng22
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/10/22 16:49
  • 上次更新2023/10/27 06:29:36
查看原帖
不知道哪里错了(模拟题)求助
539591
liweiheng22楼主2022/10/22 16:49

题目

描述 最初有一个长度为 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\leq n,q \leq 1001⩽n,q⩽100;

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

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

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

以上是WA代码,完全不知道哪里错了。

如果有知道问题的大佬,请在评论区告知,谢谢。

?

2022/10/22 16:49
加载中...