描述 最初有一个长度为 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代码,完全不知道哪里错了。
如果有知道问题的大佬,请在评论区告知,谢谢。
?