0分求助
查看原帖
0分求助
629466
Iorz楼主2022/9/27 16:09
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;

const int M = 100010;
int a[M];
int i ;
int check(int x){
    int l = 0 ,r = M;
    while(l<r){
        int mid = (l + r) /2;
        if(a[mid] < x) l = mid + 1;
        else{
            r = mid ;
        }
    }
    if( a[l] == x) return 1;
    else return 0;
}

int check1(int x){
    int l = 0 ,r = M;
    while(l<r){
        int mid = (l + r) /2;
        if(a[mid] < x) l = mid + 1;
        else{
            r = mid ;
        }
    }
    return l;
}

int main(){
    int n;
    cin >> n;
	memset(a,1,sizeof(a)); 
    while(n--){
        int op , len;
        cin >> op >> len;
        if(op == 1){ // ins
            if(check(len)){
                cout << "Already Exist" << endl;
            } else {
                a[i++] = len;
                sort(a,a+i);
            }
        } else if(op == 2){
        	if(a[i-1] == -1) {
        		cout << "Empty" << endl;
        		return 0;
        	}
        	int t = check1(len);
        	//cout << "t:"<< t << endl;
        	 if(a[t] == len){
        	 	cout << len << endl;
        	 	a[t] = -1;
        	 	sort(a,a+i);
        	 } else{
        	 	int d1 = a[t] - len;
        	 	int d2 = abs(a[t-1] - len);
        	 	if(d2 <= d1){
        	 		cout << a[t-1] << endl;
        	 		a[t-1] = -1;
        	 	} else if(d2 > d1){
        	 		cout << a[t] << endl;
        	 		a[t] = -1;
        	 	}
        	 	sort(a,a+i);
        	 } 
        }
    }
    return 0;
}
2022/9/27 16:09
加载中...