제출 #1063478

#제출 시각아이디문제언어결과실행 시간메모리
1063478RaresFelix던전 (IOI21_dungeons)C++17
컴파일 에러
0 ms0 KiB
#include "candies.h"

#include <bits/stdc++.h>

using namespace std;

using vi = vector<int>;
using ii = pair<int, int>;
using ll = long long;
using vll = vector<ll>;
using pl = pair<ll, ll>;

const ll INF2 = 1e18;
const int INF = 1e9;

struct AINT {
    int n;
    vll Mi, Ma, Lz;
    AINT(int N) : n(N), Mi(4 * N, 0), Ma(4 * N, 0), Lz(4 * N, 0) {}

    void prop(int u, int s, int d) {
        if(!Lz[u]) return;
        Mi[u] += Lz[u];
        Ma[u] += Lz[u];
        if(s != d) {
            Lz[u << 1] += Lz[u];
            Lz[u << 1 | 1] += Lz[u];
        }
        Lz[u] = 0;
    }

    void update(int l, int r, ll v, int u, int s, int d) {
        prop(u, s, d);
        if(d < l || r < s) return;
        if(l <= s && d  <= r) {
            Lz[u] += v;
            prop(u, s, d);
            return;
        }
        update(l, r, v, u << 1, s, (s + d) >> 1);
        update(l, r, v, u << 1 | 1, ((s + d) >> 1) + 1, d);
        Mi[u] = min(Mi[u << 1], Mi[u << 1 | 1]);
        Ma[u] = max(Ma[u << 1], Ma[u << 1 | 1]);
    }

    void update(int l, int r, ll v) { update(l, r, v, 1, 0, n - 1); }

    bool query(int c, ll &mi, ll &ma, pl &prev, int u, int s, int d) {
        prop(u, s, d);
        if(max(Ma[u], ma) - min(Mi[u], mi) <= c) {
            mi = min(mi, Mi[u]);
            ma = max(ma, Ma[u]);
            return false;
        }
        if(s == d) {
            prev = {Mi[u], Ma[u]};
            return true;
        }
        if(!query(c, mi, ma, prev, u << 1 | 1, ((s + d) >> 1) + 1, d))
            query(c, mi, ma, prev, u << 1, s, (s + d) >> 1);
        return true;
    }

    void afis(int u, int s, int d) {
        prop(u, s, d);
        if(s == d) {
            cout << Mi[u] << " ";
            return;
        }
        afis(u << 1, s, (s + d) >> 1);
        afis(u << 1 | 1, ((s + d) >> 1) + 1, d);
    }

    void afis(string s = "") {
        cout << s;
        afis(1, 0, n - 1);
        cout << "\n";
    }

    void query(int c, ll &mi, ll &ma, pl &prev) {
        mi = INF2;
        ma = -INF2;
        query(c, mi, ma, prev, 1, 0, n - 1);
    }
};

vi distribute_candies(vi c, vi l, vi r, vi v) {
    int n = int(c.size()), m = int(l.size());
    vector<vector<ii> > Op(n);
    ///o operatie e (poz, val)
    Op[0].push_back({0, INF});
    Op[0].push_back({1, -INF});
    for(int i = 0; i < m; ++i) {
        Op[l[i]].push_back({i + 2, v[i]});
        if(r[i] + 1 < n) 
            Op[r[i] + 1].push_back({i + 2, -v[i]});
    }
    AINT Sol(m + 2);
    vi Re(n, 0);
    ll s = 0;
    for(int i = 0; i < n; ++i) {
        for(auto [p, v] : Op[i]) {
            Sol.update(p, m + 1, v);
            s += v;
        }
        ll mi, ma;
        pl prev;
        Sol.query(c[i], mi, ma, prev);
       // Sol.afis("Sol la " + to_string(i) + " = ");
        if(prev.second > ma) {
            //a murit la mi
            Re[i] = s - mi;
        } else {
            Re[i] = s - (ma - c[i]);
        }
    }
    return Re;
}

컴파일 시 표준 에러 (stderr) 메시지

dungeons.cpp:1:10: fatal error: candies.h: No such file or directory
    1 | #include "candies.h"
      |          ^~~~~~~~~~~
compilation terminated.