#include "tree.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=2e5;
vector<int> ch[maxn];
vector<ll> w,cl,ps;
int n,k;
int dfs(int v){
int c=ch[v].empty();
for(int u:ch[v]){
c+=dfs(u);
}
return c;
}
void init(std::vector<int> p, std::vector<int> W) {
n=p.size();
for(int i:W)w.push_back(i);
for(int i=1;i<n;i++)if(w[p[i]])ch[p[i]].push_back(i);
cl.push_back(0);
for(int i=0;i<n;i++)if(!i||!w[p[i]])cl.push_back(dfs(i));
sort(cl.begin(),cl.end());
k=cl.size()-1;
ps.resize(k+1);
partial_sum(cl.begin(),cl.end(),ps.begin());
}
long long query(int L, int R) {
ll l=L,r=R;
ll ans=0;
int id=lower_bound(cl.begin(),cl.end(),r/l+1)-cl.begin();
ans+=ps[id-1]*l;
ans+=(ps[k]-ps[id-1])*2*l-r*(k-(id-1));
return ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |