제출 #1328704

#제출 시각아이디문제언어결과실행 시간메모리
1328704benjaminshihCipele (COCI18_cipele)C++20
18 / 90
131 ms9332 KiB
#include <bits/stdc++.h>
using namespace std;
int main(){
    int n,m;
    cin >> n >> m;
    if(n == m){
        vector<int> l(n);
        vector<int> r(m);
        for(auto &x : l) cin >> x;
        for(auto &x : r) cin >> x;
        int mx = 0;
        sort(l.begin(),l.end());
        sort(r.begin(),r.end());  
        for(int i = 0 ; i < n ; i ++){
            mx = max(mx,abs(l[i]-r[i]));
        }
        cout << mx;
    }
    else{
        multiset<int> l,r;
        vector<int> v;
        bool ok = n < m;
        int orin = n,orim = m;
        while(n--){
            int x;cin >> x;
            l.insert(x);
            if(ok){
                v.push_back(x);
            }
        }
        while(m--){
            int x;cin >> x;
            r.insert(x);
            if(!ok){
                v.push_back(x);
            }
        }
        n = orin;
        m = orim;
        if(n > m){
            swap(n,m);
            swap(l,r);
        }
        vector<int> mn(n,INT_MAX);
        // n smaller

        for(int i = 0 ; i < n ; i++){
            // cout << i+1 << '\n';
            // for(auto x : l) cout << x << " ";
            // cout << '\n';
            // for(auto x : r) cout << x << " ";
            // cout << '\n';
            auto it = r.lower_bound(v[i]);
            int A = *it;// 39
            if(it == r.begin()){
                mn[i] = abs(v[i] - A);
                // delete element
                r.erase(it);
                l.erase(l.find(v[i]));
                continue;
            }
            else{
                --it;
                int B = *it;// 2
                //cout << "B" << B << '\n';
                if(abs(B - v[i]) < abs(A - v[i])){
                    mn[i] = abs(v[i]-B);
                    r.erase(it);
                    l.erase(l.find(v[i]));
                }
                else if(abs(B - v[i]) >= abs(A - v[i])){
                    mn[i] = abs(v[i] - A);
                    ++it;
                    r.erase(it);
                    l.erase(l.find(v[i]));
                }
            }
        }
        cout << *max_element(mn.begin(),mn.end());
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...