Submission #1166161

#TimeUsernameProblemLanguageResultExecution timeMemory
1166161anmattroiTree (IOI24_tree)C++17
0 / 100
2095 ms6892 KiB
#include "tree.h"
#include <bits/stdc++.h>
#define maxn 200005
using namespace std;

int n;
vector<int> par, w;
int64_t cost[maxn];

void init(vector<int> P, vector<int> W) {
    n = P.size(); par = P; w = W;
}

long long query(int L, int R) {
    int64_t ans = 0;
    for (int i = 0; i < n; i++) cost[i] = 0;
    for (int i = n-1; i >= 0; i--) {
        if (cost[i] > R) {
            int64_t cur_coef = R-cost[i];
            if (par[i] >= 0) cost[par[i]] += cur_coef;
            ans += w[i] * (-cur_coef);
            continue;
        }
        if (cost[i] < L) {
            int64_t cur_coef = L-cost[i];
            if (par[i] >= 0) cost[par[i]] += cur_coef;
            ans += w[i] * cur_coef;
        }
    }
    return ans;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...