Educational Codeforces Round 87 (Rated for Div. 2) D
链接
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
#include <map>
using namespace std;
typedef long long ll;
typedef double db;
const int mod=1e9+7;
const int maxn=1e6+10;
const double eps=0.00000001;
int a[maxn],n,q,k,c[maxn]; //树状数组维护数量的前缀和,二分搜索,进行增删,最后询问前缀和大于0的数即可。
int lowbit(int x){
return x&-x;
}
void update(int i){
while(i<=n){
c[i]++;
i+=lowbit(i);
//cout<<i<<endl;
}
}
void del(int i){
while(i<=n){
c[i]--;
i+=lowbit(i);
}
}
int get_sum(int i){
int res=0;
while(i>0){
res+=c[i];
i-=lowbit(i);
}
return res;
}
int main(){
cin>>n>>q;
int ans;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
update(a[i]);
}
for(int i=0;i<q;i++){
scanf("%d",&k);
if(k>0){
update(k);
}else{
k=-k;
int l=1,r=n;
while(l<=r){
int mid=(l+r)>>1;
if(get_sum(mid)>=k){
ans=mid;
r=mid-1;
}else l=mid+1;
}
del(ans);
}
}
for(int i=1;i<=n;i++){
if(get_sum(i)>0){
cout<<i<<endl;
return 0;
}
}
cout<<0<<endl;
return 0;
}