Submission #1347694

#TimeUsernameProblemLanguageResultExecution timeMemory
1347694sdkjflkjsldkfjTree (IOI24_tree)C++20
In queue
0 ms0 KiB
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
#define endl '\n'
#define pb push_back
#define ff first
#define ss second
#define all(a) a.begin(),a.end()

const int maxN=2e5+15;
vector<vector<int>>g(maxN);
vector<int> w(maxN);
int n;

void init(vector<int>P,vector<int>W){
    n=P.size();
    w=W;
    for(int i=1;i<n;i++) g[P[i]].push_back(i);
}

ll query(int l,int r){
    vector<ll>s(n,0);
    ll ans=0;
    for (int i=n-1;i>=0;i--){
        ll sum=0;
        for(int ch:g[i]) sum+=s[ch];
        ll v=sum;
        if(v<l) v=l;
        if(v>r) v=r;
        ans+=abs(v-sum)*w[i];
        s[i]=v;
    }
    return ans;
}