Submission #476884

#TimeUsernameProblemLanguageResultExecution timeMemory
476884RainbowbunnySnowball (JOI21_ho_t2)C++17
100 / 100
112 ms18632 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 2e5 + 5;

int n, q;
long long X[MAXN], W[MAXN], Min[MAXN], Max[MAXN], L[MAXN], R[MAXN];
vector <long long> V;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> q;
    for(int i = 0; i < n; i++)
    {
        cin >> X[i];
    }
    for(int i = 0; i < q; i++)
    {
        cin >> W[i];
        if(i == 0)
        {
            Min[i] = min(Min[i], W[i]);
            Max[i] = max(Max[i], W[i]);
        }
        else
        {
            W[i] += W[i - 1];
            Min[i] = min(Min[i - 1], W[i]);
            Max[i] = max(Max[i - 1], W[i]);
        }
        V.push_back(Max[i] - Min[i]);
    }
    for(int i = 0; i < n; i++)
    {
        L[i] = X[i] + Min[q - 1];
        R[i] = X[i] + Max[q - 1];
    }
    for(int i = 0; i + 1 < n; i++)
    {
        int id = lower_bound(V.begin(), V.end(), X[i + 1] - X[i]) - V.begin();
        if(id == q)
        {
            continue;
        }
        long long tmp = W[id] - (id == 0 ? 0 : W[id - 1]);
        if(tmp > 0)
        {
            R[i] = X[i + 1] + Min[id];
            L[i + 1] = X[i + 1] + Min[id];
        }
        else
        {
            R[i] = X[i] + Max[id];
            L[i + 1] = X[i] + Max[id];
        }
    }
    for(int i = 0; i < n; i++)
    {
        cout << R[i] - L[i] << '\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...