제출 #1285468

#제출 시각아이디문제언어결과실행 시간메모리
1285468Luvidi트리 (IOI24_tree)C++20
7 / 100
61 ms16896 KiB
#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 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...