Submission #796328

#TimeUsernameProblemLanguageResultExecution timeMemory
796328JohannTourism (JOI23_tourism)C++14
7 / 100
108 ms10376 KiB
#include "bits/stdc++.h"
using namespace std;

typedef vector<int> vi;
typedef vector<vi> vvi;
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()

int N, M, Q;
vi C, CM;
vvi adj;

struct segtree
{
    vi maxi;
    int size;
    void init(vi &A)
    {
        size = 1;
        while (size < sz(A))
            size *= 2;
        maxi.assign(2 * size, INT_MIN);
        for (int i = 0; i < sz(A); ++i)
            maxi[i + size] = A[i];
        for (int i = size - 1; i > 0; --i)
            maxi[i] = max(maxi[2 * i], maxi[2 * i + 1]);
    }
    int query(int l, int r) { return query(l, r, 1, 0, size); }
    int query(int l, int r, int x, int lx, int rx)
    {
        if (l <= lx && rx <= r)
            return maxi[x];
        if (r <= lx || rx <= l)
            return INT_MIN;
        int m = (lx + rx) / 2;
        return max(query(l, r, 2 * x, lx, m), query(l, r, 2 * x + 1, m, rx));
    }
};
segtree segMax;
segtree segMin;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> N >> M >> Q;

    adj.resize(N);
    for (int i = 0, a, b; i < N - 1; ++i)
    {
        cin >> a >> b;
        --a, --b;
        adj[a].push_back(b), adj[b].push_back(a);
    }

    C.resize(M), CM.resize(M);
    for (int i = 0; i < M; ++i)
    {
        cin >> C[i];
        --C[i];
        CM[i] = -C[i];
    }
    segMax.init(C);
    segMin.init(CM);

    for (int i = 0, l, r; i < Q; ++i)
    {
        cin >> l >> r;
        --l;
        int lx = -segMin.query(l, r);
        int rx = segMax.query(l, r);

        cout << rx - lx + 1 << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...