제출 #971671

#제출 시각아이디문제언어결과실행 시간메모리
971671vjudge1Bitaro's travel (JOI23_travel)C++17
15 / 100
88 ms18000 KiB
#include <time.h>
#include <cstdlib>
#include <stack>
#include <numeric>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <map>
#include <set>
#include <iterator>
#include <deque>
#include <queue>
#include <sstream>
#include <array>
#include <string>
#include <tuple>
#include <chrono>
#include <cassert>
#include <cstdio>
#include <cstring>
#include <list>
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <bitset>
#define ll long long
using namespace std;

int tt = 1, n;
ll a[200005], dist, x[200005];
set<pair<ll, int>> st;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        st.insert({a[i], i});
    }
    cin >> tt;
    for(int i = 1; i <= tt; i++){
        cin >> x[i];
        ll sum = 0, pos = x[i];
        while(!st.empty()){
            ll x1 = 1e10, y1 = 1e10;
            pair<ll, int> p1, p2;
            if(st.begin()->first <= pos){
                auto it = st.lower_bound({pos, 0});
                it--;
                x1 = pos - it->first;
                p1 = *it;
            }
            if(st.rbegin()->first > pos){
                auto it = st.upper_bound({pos, 0});
                y1 = it->first - pos;
                p2 = *it;
            }
            if(x1 <= y1){
                sum += x1;
                pos -= x1;
                st.erase(p1);
            }   
            else{
                sum += y1;
                pos += y1;
                st.erase(p2);
            }
        }
        cout << sum << "\n";
    }
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...