Submission #881009

#TimeUsernameProblemLanguageResultExecution timeMemory
881009epicci23Vinjete (COI22_vinjete)C++17
100 / 100
911 ms441840 KiB
#include "bits/stdc++.h"
using namespace std;
#define pb push_back
#define endl '\n'
#define all(x) ((x).begin(),(x).end())
#define sz(x) ((int)(x).size())

const int N = 1e5 + 5;

struct Node{
  Node* lc;Node* rc;
  int lf,rg;
  int mini,cnt,lazy;
  Node(int ll,int rr){
    lc=rc=NULL;
    lazy=mini=0;
    lf=ll; rg=rr;
    cnt=rr-ll+1;
  }
};

Node* root;

void push(Node *rt){
  if(rt==NULL) return;
  int hl = rt->lf,hr = rt->rg;
  int hm = (hl+hr)/2;
  int u = rt->lazy;
  rt->mini+=u; rt->lazy=0;

  if(rt->lc==NULL)rt->lc=new Node(hl,hm);
  rt->lc->lazy+=u;
  
  if(rt->rc==NULL) rt->rc=new Node(hm+1,hr);
  rt->rc->lazy+=u;

  return;
}

void update(Node* rt,int l,int r,int gl,int gr,int u){
  push(rt);
  if(rt==NULL) return;
  if(r<gl || l>gr) return;
  if(l>=gl && r<=gr){
    rt->lazy+=u;
    push(rt); 
    return;
  }
  int mi = (l+r)/2;
  update(rt->lc,l,mi,gl,gr,u);
  update(rt->rc,mi+1,r,gl,gr,u);
  rt->mini=min(rt->lc->mini,rt->rc->mini);
  rt->cnt=0;
  if(rt->mini==rt->lc->mini) rt->cnt+=rt->lc->cnt;
  if(rt->mini==rt->rc->mini) rt->cnt+=rt->rc->cnt;
}

vector<array<int,3>> v[N];
int ans[N],n,m;

void dfs(int c,int p){
  push(root);

  if(root->mini==0) ans[c] = m - root->cnt;
  else ans[c]=m;

  for(auto x:v[c]){
    if(x[0]==p) continue;
    update(root,1,m,x[1],x[2],1);
    dfs(x[0],c);
    update(root,1,m,x[1],x[2],-1);
  }
}

void solve(){
  
  cin >> n >> m;
  root=new Node(1,m);
  for(int i=1;i<n;i++){
    int a,b,c,d;
    cin >> a >> b >> c >> d;
    v[a].pb({b,c,d});
    v[b].pb({a,c,d});
  }
  
  dfs(1,0);

  for(int i=2;i<=n;i++) cout << ans[i] << endl;
}

int32_t main(){
  ios::sync_with_stdio(0);cin.tie(0);
  int t=1;//cin >> t;
  while(t--) solve();
}
#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...