#pragma GCC optimize("O3")
#include<bits/stdc++.h>
#define ll long long
#define endl "\n"
#define AI ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
random_device rd;
mt19937_64 gen(rd());
uniform_int_distribution<uint64_t>distrib(1,UINT_MAX);
const ll sz=5e6;
ll nw=1;
struct node
{
    ll l;
    ll r;
    ll sum;
    node(): l(0),r(0),sum(0){};
};
struct vertex
{
    ll b;
    ll ql;
    ll qr;
};
node Nodes[sz];
vector<vector<vertex>>v;
vector<vertex>pa;
queue<ll>sr;
map<ll,ll>ok;//orginal->kod
map<ll,ll>ko;
void dfs(ll x,ll p=-1)
{
    sr.push(x);
    for(ll i=0;i<v[x].size();i++)
    {
        if(v[x][i].b!=p)
        {
            pa[v[x][i].b]=v[x][i];
            pa[v[x][i].b].b=x;
            dfs(v[x][i].b,x);
        }
    }
}
ll build(ll l,ll r)
{
    if(l==r)
    return nw++;
    ll mid=(l+r)/2;
    ll nww=nw++;
    Nodes[nww].l=build(l,mid);
    Nodes[nww].r=build(mid+1,r);
    return nww;
}
ll upd(ll l,ll r,ll xl,ll xr,ll pos)
{
    //cout<<l<<' '<<r<<' '<<pos<<endl;
    if(xl<=l and r<=xr)
    {
        Nodes[nw].sum=ko[r]-ko[l]+1;
        return nw++;
    }
    //cout<<"1--> "<<pos<<' '<<Nodes[pos].sum<<' '<<l<<' '<<r<<" 2--> ";
    if(ko[r]-ko[l]+1==Nodes[pos].sum)
    return pos;
  //  cout<<l<<' '<<r<<":::"<<endl;
    ll mid=(l+r)/2;
    ll nww=nw++;
    if(!(l>xr or xl>mid))
    Nodes[nww].l=upd(l,mid,xl,xr,Nodes[pos].l);
    else
    Nodes[nww].l=Nodes[pos].l;
    if(!(mid+1>xr or xl>r))
    Nodes[nww].r=upd(mid+1,r,xl,xr,Nodes[pos].r);
    else
    Nodes[nww].r=Nodes[pos].r;
    Nodes[nww].sum=Nodes[Nodes[nww].l].sum+Nodes[Nodes[nww].r].sum;
  //  cout<<Nodes[nww].sum<<' '<<l<<' '<<mid<<' '<<r<<' '<<xl<<' '<<xr<<' ';
    if(!(l>xr or xl>mid) and !(mid+1>xr or xl>r))
    Nodes[nww].sum+=ko[mid+1]-ko[mid]-1;
 //   cout<<Nodes[nww].sum<<endl;
    return nww;
}
void print(ll v,ll l,ll r)
{
    cout<<Nodes[v].sum<<' '<<l<<' '<<r<<endl;
    if(l==r)
    return;
    else
    {
        ll m=(l+r)/2;
        print(Nodes[v].l,l,m);
        print(Nodes[v].r,m+1,r);
    }
}
int main()
{
    AI
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    ll n,m,i,t,x,y,l,r;
    cin>>n>>m;
    v.resize(n+1);
    pa.resize(n+1);
    vector<ll>co;
    vector<ll>ver(n+1,0);
    for(i=1;i<n;i++)
    {
        cin>>x>>y>>l>>r;
        co.push_back(l);
        co.push_back(r);
        vertex ne;
        ne.b=y;
        ne.ql=l;
        ne.qr=r;
        v[x].push_back(ne);
        ne.b=x;
        v[y].push_back(ne);
    }
    dfs(1);
    sort(co.begin(),co.end());
    t=1;
    for(i=0;i<co.size();i++)
    {
        if(ok[co[i]])
        continue;
        ko[t]=co[i];
        ok[co[i]]=t++;
    }
    ver[1]=build(1,t);
    sr.pop();
   // cout<<sr.size()<<endl;
    while(sr.size())
    {
        i=sr.front();
        sr.pop();
        x=pa[i].b;
        l=pa[i].ql;
        r=pa[i].qr;
        l=ok[l];
        r=ok[r];
      ///  cout<<i<<' '<<x<<' '<<l<<' '<<r<<' '<<ver[x]<<endl;
        ver[i]=upd(1,t-1,l,r,ver[x]);
     ///   cout<<endl<<endl;
    }
    for(i=2;i<=n;i++)
    cout<<Nodes[ver[i]].sum<<endl;
}
| # | 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... |