时间限制 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。
5
1 2 3 4 5
3
1 2
2 2
2 5
3
-1
5
1 4 7 5 10
5
1 2
2 2
2 10
1 12
2 10
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.