Submission #994477


Source Code Expand

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <algorithm>
#include <numeric>
#include <random>
#include <vector>
#include <array>
#include <bitset>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <cassert>

using namespace std;
using ll = long long;
using ull = unsigned long long;
constexpr ll TEN(int n) { return (n==0) ? 1 : 10*TEN(n-1); }
int bsr(int x) { return 31 - __builtin_clz(x); }

struct UnionFind {
    vector<int> ig;
    vector<vector<int>> gi;
    int gn;
    UnionFind(int N) {
        ig.resize(N); gi.resize(N);
        for (int i = 0; i < N; i++) {
            ig[i] = i; gi[i] = {i};
        }
        gn = N;
    }
    void merge(int a, int b) {
        if (same(a, b)) return;
        gn--;
        int x = ig[a], y = ig[b];
        if (gi[x].size() < gi[y].size()) swap(x, y);
        for (int j: gi[y]) {
            ig[j] = x;
        }
        gi[x].insert(gi[x].end(), gi[y].begin(), gi[y].end());
        gi[y].clear();
    }
    bool same(int a, int b) {
        return ig[a] == ig[b];
    }
};


const int MN = 200100;
int n;
ll a[MN], as[MN];

ll calc(ll x) {
    ll mi = as[n-1]-x;
    for (int i = n-2; i >= 2; i--) {
        mi = min(mi, 2*as[i]-mi);
    }
    return a[0]-mi+as[1];
}

int main() {
    ios::sync_with_stdio(0);
    cout << setprecision(20);

    cin >> n;
    for (int i = 0; i < n-1; i++) {
        cin >> a[i];
    }
    as[0] = 0;
    for (int i = 0; i < n-1; i++) {
        as[i+1] = as[i]+a[i];
    }

    map<int, int> mp;
    int m;
    cin >> m;
    UnionFind uf(m);
    for (int i = 0; i < m; i++) {
        int x;
        cin >> x;
        int y = as[n-1]-x;
        if (mp.count(y)) {
            uf.merge(i, mp[y]);
        } else {
            mp[y] = i;
        }
    }

    for (int i = n-2; i >= 2; i--) {
        while (true) {
            assert(mp.size());
            auto it = mp.end(); it--;
            auto p = *it;
            if (p.first <= as[i]) break;
            int np = 2*as[i]-p.first;
            mp.erase(it);
            if (mp.count(np)) {
//                cout << "M " << p.second << " " << mp[np] << endl;
                uf.merge(p.second, mp[np]);
            } else {
                mp[np] = p.second;
            }
        }
    }

    int res[MN];
    for (auto p: mp) {
//        cout << p.first << " " << p.second << endl;
        for (int d: uf.gi[uf.ig[p.second]]) {
            res[d] = a[0] - p.first + as[1];
        }
    }

    for (int i = 0; i < m; i++) {
        cout << res[i] << endl;
    }
/*    for (int i = 0; i < m; i++) {
        int x;
        cin >> x;
        cout << calc(x) << endl;
    }*/
    return 0;
}

Submission Info

Submission Time
Task H - Tokaido
User yosupo
Language C++14 (GCC 5.4.1)
Score 1600
Code Size 2814 Byte
Status AC
Exec Time 1128 ms
Memory 27232 KB

Judge Result

Set Name sample dataset1 dataset2
Score / Max Score 0 / 0 700 / 700 900 / 900
Status
AC × 2
AC × 20
AC × 37
Set Name Test Cases
sample sample-01.txt, sample-02.txt
dataset1 sample-01.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt
dataset2 sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt
Case Name Status Exec Time Memory
01-01.txt AC 18 ms 3456 KB
01-02.txt AC 3 ms 256 KB
01-03.txt AC 3 ms 256 KB
01-04.txt AC 15 ms 1792 KB
01-05.txt AC 19 ms 3456 KB
01-06.txt AC 25 ms 3328 KB
01-07.txt AC 8 ms 1152 KB
01-08.txt AC 25 ms 3328 KB
01-09.txt AC 23 ms 3456 KB
01-10.txt AC 3 ms 256 KB
01-11.txt AC 6 ms 896 KB
01-12.txt AC 18 ms 3328 KB
01-13.txt AC 20 ms 3456 KB
01-14.txt AC 19 ms 3328 KB
01-15.txt AC 19 ms 3328 KB
01-16.txt AC 19 ms 3328 KB
01-17.txt AC 19 ms 3328 KB
01-18.txt AC 19 ms 3328 KB
01-19.txt AC 19 ms 3328 KB
02-01.txt AC 126 ms 3584 KB
02-02.txt AC 1055 ms 27136 KB
02-03.txt AC 1095 ms 25852 KB
02-04.txt AC 1093 ms 26412 KB
02-05.txt AC 1128 ms 25656 KB
02-06.txt AC 1084 ms 26388 KB
02-07.txt AC 1084 ms 26648 KB
02-08.txt AC 1098 ms 23296 KB
02-09.txt AC 1093 ms 23168 KB
02-10.txt AC 1070 ms 25088 KB
02-11.txt AC 1077 ms 27232 KB
02-12.txt AC 1062 ms 26800 KB
02-13.txt AC 1060 ms 26868 KB
02-14.txt AC 1069 ms 26368 KB
02-15.txt AC 1023 ms 26624 KB
02-16.txt AC 1023 ms 26496 KB
sample-01.txt AC 3 ms 256 KB
sample-02.txt AC 3 ms 256 KB