Submission #1291549

#TimeUsernameProblemLanguageResultExecution timeMemory
1291549tunademayoSnowball (JOI21_ho_t2)C++20
100 / 100
76 ms11532 KiB
#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define FOR(i, a, b) for(int i = a ; i <= b ; i++)
#define FORD(i, a, b) for(int i = a ; i >= b ; i--)
#define REP(i, a, b) for(int i = a ; i < b ; i++)

const bool Multitest = 0, Local = 0;

const int N = 2e5 + 10;

int n, q;

ll a[N], b[N];
ll mad[N], mid[N];
ll l[N], r[N];

void cal(int p1, int p2)
{
    if(a[p1] + mad[q] < a[p2] + mid[q])
    {
        r[p1] = mad[q];
        l[p2] = abs(mid[q]);

        return;
    }

    int low = 1, high = q, p = -1;

    while(low <= high)
    {
        int m = (low + high) >> 1;

        if(a[p1] + mad[m] >= a[p2] + mid[m]) high = m - 1, p = m;
        else low = m + 1;
    }

    if(b[p] < 0) // di qua trai
    {
        r[p1] = mad[p];
        l[p2] = (a[p2] - a[p1]) - r[p1];
    }
    else
    {
        l[p2] = abs(mid[p]);
        r[p1] = (a[p2] - a[p1]) - l[p2];
    }
}

void work()
{
    cin >> n >> q;

    for(int i = 1 ; i <= n ; i++) cin >> a[i];

    sort(a + 1, a + 1 + n);

    a[0] = -1e18, a[n + 1] = 1e18;

    FOR(i, 1, q)
    {
        cin >> b[i];
    }

    ll s = 0;

    FOR(i, 1, q)
    {
        s += b[i];

        mid[i] = min(mid[i - 1], s);
        mad[i] = max(mad[i - 1], s);
    }

    FOR(i, 0, n) cal(i, i + 1);

    FOR(i, 1, n) cout << l[i] + r[i] << ' ';
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int q = 1;

    if(Local && fopen("code.inp", "r"))
    {
        freopen("code.inp", "r", stdin);
        freopen("code.ans", "w", stdout);
    }

    if(Multitest)   cin >> q;

    while(q--) work();
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:90:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   90 |         freopen("code.inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:91:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   91 |         freopen("code.ans", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...