Submission #1304974

#TimeUsernameProblemLanguageResultExecution timeMemory
1304974vtnooDynamic Diameter (CEOI19_diameter)C++20
7 / 100
290 ms24376 KiB
#include <bits/stdc++.h> #define pb push_back #define fst first #define snd second #define fore(i,a,b) for(int i=a,pao=b;i<pao;++i) #define SZ(x) ((int)x.size()) #define ALL(x) x.begin(),x.end() #define mset(a,v) memset((a),(v),sizeof(a)) #define FIN ios::sync_with_stdio(0);cin.tie(0);cout.tie(0) using namespace std; typedef long long ll; #define int long long const int MAXN=1e5+9; const ll INF=1e18; int tim=0,n,in[MAXN],out[MAXN],z[MAXN],up[MAXN],ew[MAXN]; vector<tuple<int,int,int>>adj[MAXN]; struct Nodo{ ll f,s,lz; Nodo(){ f=0,s=-INF; lz=0; } Nodo(ll a,ll b){ f=a,s=b; lz=0; } }; Nodo st[MAXN*4]; void apply(int v,ll x){ st[v].lz+=x; st[v].f+=x; if(st[v].s!=-INF)st[v].s+=x; } void push(int v){ apply(v*2,st[v].lz); apply(v*2+1,st[v].lz); st[v].lz=0; } void upd(int ts,int te,int x,int v=1,int s=0,int e=n-1){ if(e<ts||te<s)return; if(ts<=s&&e<=te){ apply(v,x); return; }else{ push(v); int m=(s+e)/2; upd(ts,te,x,v*2,s,m); upd(ts,te,x,v*2+1,m+1,e); vector<ll>a={st[v*2].f,st[v*2].s,st[v*2+1].f,st[v*2+1].s}; sort(ALL(a)); reverse(ALL(a)); st[v]=Nodo(a[0],a[1]); } } void dfs(int u,int p){ in[u]=tim++; for(auto&[v,c,i]:adj[u]){ if(v==p)continue; up[i]=v; //el extremo superior z[v]=c; //valor del nodo dfs(v,u); } out[u]=tim; } signed main(){FIN; int q; ll w; cin>>n>>q>>w; fore(i,0,n-1){ int u,v; ll c; cin>>u>>v>>c; adj[u].pb({v,c,i}); adj[v].pb({u,c,i}); ew[i]=c; } dfs(1,1); fore(i,1,n+1){ upd(in[i],out[i]-1,z[i]); } //~ cout<<st[1].f<<" "<<st[1].s<<endl; ll last=0; while(q--){ ll d_, e_; cin>>d_>>e_; ll d=(d_+last)%(n-1); ll e=(e_+last)%w; ll diff=e-ew[d]; upd(in[up[d]],out[up[d]]-1,diff); ew[d]=e; ll ans=max(0ll,st[1].f)+max(0ll,st[1].s); cout<<ans<<endl; last=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...