Submission #1293751

#TimeUsernameProblemLanguageResultExecution timeMemory
1293751wyf1202Vinjete (COI22_vinjete)C++17
100 / 100
194 ms40508 KiB
#include<bits/stdc++.h>
using namespace std;

#define X first
#define Y second
#define pb emplace_back
#define int long long
const int M=2e5+5;
int n,m,cnt,ans[M],L[M],R[M],pos[M];
vector<pair<int,int>>g[M];
struct Tree{
	struct node{
		int l,r,sm,tag;
	}t[M<<2];
	#define ls p<<1
	#define rs p<<1|1
	#define mid (t[p].l+t[p].r>>1)
	inline void pushup(int p){
		if(t[p].tag)t[p].sm=pos[t[p].r+1]-pos[t[p].l];
		else if(t[p].l!=t[p].r)t[p].sm=t[ls].sm+t[rs].sm;
		else t[p].sm=0;
	}
	inline void build(int l,int r,int p){
		t[p].l=l,t[p].r=r;
		if(l==r)return;
		build(l,mid,ls),build(mid+1,r,rs);
	}
	inline void update(int l,int r,int k,int p){
		if(l<=t[p].l&&t[p].r<=r){
			t[p].tag+=k,pushup(p);
			return;
		}
		if(l<=mid)update(l,r,k,ls);
		if(r>mid) update(l,r,k,rs);
		pushup(p);
	}
}T;
inline void dfs(int x,int fa){
	ans[x]=T.t[1].sm;
	for(auto [y,id]:g[x]){
		if(y==fa)continue;
		T.update(L[id],R[id],1,1),dfs(y,x),
		T.update(L[id],R[id],-1,1);
	} return;
}
signed main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1,u,v;i<n;++i)
		scanf("%lld%lld%lld%lld",&u,&v,L+i,R+i),
		g[u].pb(v,i),g[v].pb(u,i),
		pos[++cnt]=L[i],pos[++cnt]=R[i]+1;

	sort(pos+1,pos+1+cnt);
	cnt=unique(pos+1,pos+1+cnt)-pos-1;
	for(int i=1;i<n;++i)
		L[i]=lower_bound(pos+1,pos+1+cnt,L[i])-pos,
		R[i]=upper_bound(pos+1,pos+1+cnt,R[i])-pos-1;

	T.build(1,cnt,1),dfs(1,0);
	for(int i=2;i<=n;++i)
		printf("%lld\n",ans[i]);
	return 0;
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:47:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |         scanf("%lld%lld",&n,&m);
      |         ~~~~~^~~~~~~~~~~~~~~~~~
Main.cpp:49:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 |                 scanf("%lld%lld%lld%lld",&u,&v,L+i,R+i),
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...