#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC target ("avx2")
#define pb push_back
#define rc (i<<1)|1
#define lc (i<<1)
#define el "\n"
#define f first
#define s second
typedef long long ll;
const int MM=1e5+5, MOD=1e9+7, LOG=19;
int N, Q, sz[MM], bk[MM], pa[MM], in[LOG][MM], ot[LOG][MM], cp[LOG][MM], tp[LOG][MM], ct;
vector<pair<int,ll>> adj[MM]; ll av[MM], W; pair<ll,int> mp[MM];
multiset<ll> ast;
struct node {
ll lz;
pair<ll,int> mx;
};
struct tree {
vector<node> seg;
int wt, h;
inline void apply(int i, ll v) {
seg[i].mx.f+=v;
if(i<wt) seg[i].lz+=v;
}
inline void build(int p) {
while(p>1) p>>=1, seg[p].mx=max(seg[p<<1].mx, seg[p<<1|1].mx), seg[p].mx.f+=seg[p].lz;
}
inline void push(int p) {
for(int s=h; s>0; --s) {
int i=p>>s;
if (seg[i].lz!=0) {
apply(lc, seg[i].lz);
apply(rc, seg[i].lz);
seg[i].lz=0;
}
}
}
inline void inc(int l, int r, ll value) {
if(l>r) return;
r++; l+=wt, r+=wt; int l0=l, r0=r;
for (; l<r; l>>=1, r>>=1) {
if(l&1) apply(l++, value);
if(r&1) apply(--r, value); }
build(l0); build(r0 - 1);
}
inline pair<ll,int> qry(int l, int r) {
if(l>r) return {0,0};
r++; l+=wt, r+=wt; push(l); push(r - 1);
pair<ll,int> res=make_pair(0,0);
for (; l<r; l>>=1, r>>=1) {
if(l&1) res=max(res, seg[l++].mx);
if(r&1) res=max(seg[--r].mx, res); }
return res;
}
inline void construct() {
for (int i=wt-1; i>0; --i) seg[i].mx=max(seg[lc].mx, seg[rc].mx);
}
inline void init(int n) {
wt=n; h=64-__builtin_clzll((ll)n);
seg.resize(2*n+1);
for(int i=n; i<n+n; ++i) seg[i].mx=mp[i-n+1];
construct();
}
} st[MM];
int crt(int u, int th, int fa) {
for(auto &e:adj[u]) if(e.f!=fa&&!bk[e.f]&&sz[e.f]>th) {
return crt(e.f, th, u); }
return u;
}
void dfs(int u, int fa) {
sz[u]=1;
for(auto &e:adj[u]) if(e.f!=fa&&!bk[e.f]) {
dfs(e.f, u); sz[u]+=sz[e.f];
}
}
void etr(int u, int fa, int lvl, int rt, int tv, ll ew) {
in[lvl][u]=++ct; cp[lvl][u]=rt; tp[lvl][u]=tv; mp[ct]=make_pair(ew,u);
for(auto &e:adj[u]) if(e.f!=fa&&!bk[e.f]) {
etr(e.f, u, lvl, rt, tv, e.s+ew); }
ot[lvl][u]=ct;
}
void rec(int rt, int nds, int fa=-1, int lvl=0) {
if(nds<=1) return; dfs(rt, 0);
rt=crt(rt, nds/2, 0); pa[rt]=fa;
bk[rt]=true; ct=0;
// get ett
cp[lvl][rt]=tp[lvl][rt]=rt;
for(auto &e:adj[rt]) if(!bk[e.f]) etr(e.f, rt, lvl, rt, e.f, e.s);
if(ct==0) return;
// construct tree
st[rt].init(ct);
auto x=st[rt].qry(0, ct-1); x.s=tp[lvl][x.s];
auto y=max(st[rt].qry(0, in[lvl][x.s]-2), st[rt].qry(ot[lvl][x.s], ct-1));
ast.insert(av[rt]=x.f+y.f);
int tally=0, lv=-1;
for(auto &e:adj[rt]) if(!bk[e.f]) {
if(sz[e.f]<sz[rt]) {
tally+=sz[e.f];
rec(e.f, sz[e.f], rt, lvl+1); }
else lv=e.f; }
if(~lv) rec(lv, nds-tally-1, rt, lvl+1);
}
void qry(int u, int v, ll val) {
int cur=0;
while(cur<LOG-1&&cp[cur+1][u]==cp[cur+1][v]&&cp[cur+1][u]!=0) ++cur;
int crt=cp[cur][u];
while(cur>=0) {
int w=(in[cur][u]>in[cur][v]?u:v), wt=st[crt].wt;
st[crt].inc(in[cur][w]-1, ot[cur][w]-1, val);
auto x=st[crt].qry(0, wt-1); x.s=tp[cur][x.s];
auto y=max(st[crt].qry(0, in[cur][x.s]-2), st[crt].qry(ot[cur][x.s], wt-1));
ll cnd=x.f+y.f;
if(cnd!=av[crt]&&st[crt].wt>0) {
ast.erase(ast.find(av[crt]));
ast.insert(av[crt]=cnd); }
crt=pa[crt]; cur--;
}
}
int32_t main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin>>N>>Q>>W;
vector<pair<ll,pair<int,int>>> edg;
for(int i=1; i<N; ++i) {
ll u, v, w; cin>>u>>v>>w;
adj[u].pb({v,w}); adj[v].pb({u,w});
edg.pb({w,{u,v}}); }
// preprocess
rec(1, N);
ll last=0, e, w;
for(int q=1; q<=Q; ++q) {
cin>>e>>w;
e=(e+last)%(N-1);
w=(w+last)%W;
qry(edg[e].s.f, edg[e].s.s, w-edg[e].f);
last=*ast.rbegin(); edg[e].f=w;
cout<<last<<el;
}
}
Compilation message
diameter.cpp: In function 'void rec(int, int, int, int)':
diameter.cpp:102:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
102 | if(nds<=1) return; dfs(rt, 0);
| ^~
diameter.cpp:102:24: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
102 | if(nds<=1) return; dfs(rt, 0);
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
5836 KB |
Output is correct |
2 |
Correct |
3 ms |
5836 KB |
Output is correct |
3 |
Correct |
3 ms |
5836 KB |
Output is correct |
4 |
Correct |
3 ms |
5836 KB |
Output is correct |
5 |
Correct |
3 ms |
5836 KB |
Output is correct |
6 |
Correct |
3 ms |
5836 KB |
Output is correct |
7 |
Correct |
3 ms |
5836 KB |
Output is correct |
8 |
Correct |
4 ms |
5836 KB |
Output is correct |
9 |
Correct |
3 ms |
5836 KB |
Output is correct |
10 |
Correct |
3 ms |
5836 KB |
Output is correct |
11 |
Correct |
4 ms |
5836 KB |
Output is correct |
12 |
Correct |
5 ms |
5836 KB |
Output is correct |
13 |
Correct |
3 ms |
5972 KB |
Output is correct |
14 |
Correct |
3 ms |
5836 KB |
Output is correct |
15 |
Correct |
3 ms |
5964 KB |
Output is correct |
16 |
Correct |
3 ms |
5964 KB |
Output is correct |
17 |
Correct |
3 ms |
5964 KB |
Output is correct |
18 |
Correct |
3 ms |
5964 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
5836 KB |
Output is correct |
2 |
Correct |
3 ms |
5836 KB |
Output is correct |
3 |
Correct |
3 ms |
5836 KB |
Output is correct |
4 |
Correct |
3 ms |
5836 KB |
Output is correct |
5 |
Correct |
3 ms |
5836 KB |
Output is correct |
6 |
Correct |
3 ms |
5836 KB |
Output is correct |
7 |
Correct |
3 ms |
5836 KB |
Output is correct |
8 |
Correct |
4 ms |
5836 KB |
Output is correct |
9 |
Correct |
3 ms |
5836 KB |
Output is correct |
10 |
Correct |
3 ms |
5836 KB |
Output is correct |
11 |
Correct |
4 ms |
5836 KB |
Output is correct |
12 |
Correct |
5 ms |
5836 KB |
Output is correct |
13 |
Correct |
3 ms |
5972 KB |
Output is correct |
14 |
Correct |
3 ms |
5836 KB |
Output is correct |
15 |
Correct |
3 ms |
5964 KB |
Output is correct |
16 |
Correct |
3 ms |
5964 KB |
Output is correct |
17 |
Correct |
3 ms |
5964 KB |
Output is correct |
18 |
Correct |
3 ms |
5964 KB |
Output is correct |
19 |
Correct |
23 ms |
6620 KB |
Output is correct |
20 |
Correct |
19 ms |
6580 KB |
Output is correct |
21 |
Correct |
22 ms |
6628 KB |
Output is correct |
22 |
Correct |
25 ms |
6748 KB |
Output is correct |
23 |
Correct |
32 ms |
8796 KB |
Output is correct |
24 |
Correct |
39 ms |
9472 KB |
Output is correct |
25 |
Correct |
38 ms |
9792 KB |
Output is correct |
26 |
Correct |
46 ms |
10444 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
5836 KB |
Output is correct |
2 |
Correct |
3 ms |
5892 KB |
Output is correct |
3 |
Correct |
5 ms |
5836 KB |
Output is correct |
4 |
Correct |
17 ms |
5908 KB |
Output is correct |
5 |
Correct |
51 ms |
6164 KB |
Output is correct |
6 |
Correct |
3 ms |
5836 KB |
Output is correct |
7 |
Correct |
3 ms |
5836 KB |
Output is correct |
8 |
Correct |
3 ms |
5836 KB |
Output is correct |
9 |
Correct |
4 ms |
5836 KB |
Output is correct |
10 |
Correct |
17 ms |
5964 KB |
Output is correct |
11 |
Correct |
65 ms |
6336 KB |
Output is correct |
12 |
Correct |
6 ms |
6604 KB |
Output is correct |
13 |
Correct |
5 ms |
6604 KB |
Output is correct |
14 |
Correct |
7 ms |
6604 KB |
Output is correct |
15 |
Correct |
23 ms |
6760 KB |
Output is correct |
16 |
Correct |
97 ms |
7104 KB |
Output is correct |
17 |
Correct |
45 ms |
20328 KB |
Output is correct |
18 |
Correct |
40 ms |
20224 KB |
Output is correct |
19 |
Correct |
45 ms |
20284 KB |
Output is correct |
20 |
Correct |
64 ms |
20400 KB |
Output is correct |
21 |
Correct |
150 ms |
20808 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
6604 KB |
Output is correct |
2 |
Correct |
31 ms |
6616 KB |
Output is correct |
3 |
Correct |
125 ms |
6820 KB |
Output is correct |
4 |
Correct |
245 ms |
7064 KB |
Output is correct |
5 |
Correct |
21 ms |
13980 KB |
Output is correct |
6 |
Correct |
60 ms |
14024 KB |
Output is correct |
7 |
Correct |
252 ms |
14300 KB |
Output is correct |
8 |
Correct |
508 ms |
14644 KB |
Output is correct |
9 |
Correct |
87 ms |
53172 KB |
Output is correct |
10 |
Correct |
163 ms |
53188 KB |
Output is correct |
11 |
Correct |
491 ms |
53388 KB |
Output is correct |
12 |
Correct |
888 ms |
53864 KB |
Output is correct |
13 |
Correct |
184 ms |
106392 KB |
Output is correct |
14 |
Correct |
257 ms |
106256 KB |
Output is correct |
15 |
Correct |
687 ms |
106708 KB |
Output is correct |
16 |
Correct |
1274 ms |
106888 KB |
Output is correct |
17 |
Correct |
2121 ms |
106792 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1698 ms |
89828 KB |
Output is correct |
2 |
Correct |
1916 ms |
92308 KB |
Output is correct |
3 |
Correct |
1745 ms |
90740 KB |
Output is correct |
4 |
Correct |
1801 ms |
92744 KB |
Output is correct |
5 |
Correct |
1741 ms |
87688 KB |
Output is correct |
6 |
Correct |
1498 ms |
69548 KB |
Output is correct |
7 |
Correct |
2478 ms |
112692 KB |
Output is correct |
8 |
Correct |
2411 ms |
112588 KB |
Output is correct |
9 |
Correct |
2398 ms |
112464 KB |
Output is correct |
10 |
Correct |
2360 ms |
112036 KB |
Output is correct |
11 |
Correct |
2342 ms |
107120 KB |
Output is correct |
12 |
Correct |
2132 ms |
82016 KB |
Output is correct |
13 |
Correct |
3025 ms |
121416 KB |
Output is correct |
14 |
Correct |
3047 ms |
121592 KB |
Output is correct |
15 |
Correct |
2935 ms |
121612 KB |
Output is correct |
16 |
Correct |
2957 ms |
121280 KB |
Output is correct |
17 |
Correct |
2921 ms |
115764 KB |
Output is correct |
18 |
Correct |
2440 ms |
86372 KB |
Output is correct |
19 |
Correct |
2972 ms |
121612 KB |
Output is correct |
20 |
Correct |
3104 ms |
121632 KB |
Output is correct |
21 |
Correct |
2968 ms |
121504 KB |
Output is correct |
22 |
Correct |
3001 ms |
121264 KB |
Output is correct |
23 |
Correct |
2878 ms |
115816 KB |
Output is correct |
24 |
Correct |
2450 ms |
86396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
5836 KB |
Output is correct |
2 |
Correct |
3 ms |
5836 KB |
Output is correct |
3 |
Correct |
3 ms |
5836 KB |
Output is correct |
4 |
Correct |
3 ms |
5836 KB |
Output is correct |
5 |
Correct |
3 ms |
5836 KB |
Output is correct |
6 |
Correct |
3 ms |
5836 KB |
Output is correct |
7 |
Correct |
3 ms |
5836 KB |
Output is correct |
8 |
Correct |
4 ms |
5836 KB |
Output is correct |
9 |
Correct |
3 ms |
5836 KB |
Output is correct |
10 |
Correct |
3 ms |
5836 KB |
Output is correct |
11 |
Correct |
4 ms |
5836 KB |
Output is correct |
12 |
Correct |
5 ms |
5836 KB |
Output is correct |
13 |
Correct |
3 ms |
5972 KB |
Output is correct |
14 |
Correct |
3 ms |
5836 KB |
Output is correct |
15 |
Correct |
3 ms |
5964 KB |
Output is correct |
16 |
Correct |
3 ms |
5964 KB |
Output is correct |
17 |
Correct |
3 ms |
5964 KB |
Output is correct |
18 |
Correct |
3 ms |
5964 KB |
Output is correct |
19 |
Correct |
23 ms |
6620 KB |
Output is correct |
20 |
Correct |
19 ms |
6580 KB |
Output is correct |
21 |
Correct |
22 ms |
6628 KB |
Output is correct |
22 |
Correct |
25 ms |
6748 KB |
Output is correct |
23 |
Correct |
32 ms |
8796 KB |
Output is correct |
24 |
Correct |
39 ms |
9472 KB |
Output is correct |
25 |
Correct |
38 ms |
9792 KB |
Output is correct |
26 |
Correct |
46 ms |
10444 KB |
Output is correct |
27 |
Correct |
2 ms |
5836 KB |
Output is correct |
28 |
Correct |
3 ms |
5892 KB |
Output is correct |
29 |
Correct |
5 ms |
5836 KB |
Output is correct |
30 |
Correct |
17 ms |
5908 KB |
Output is correct |
31 |
Correct |
51 ms |
6164 KB |
Output is correct |
32 |
Correct |
3 ms |
5836 KB |
Output is correct |
33 |
Correct |
3 ms |
5836 KB |
Output is correct |
34 |
Correct |
3 ms |
5836 KB |
Output is correct |
35 |
Correct |
4 ms |
5836 KB |
Output is correct |
36 |
Correct |
17 ms |
5964 KB |
Output is correct |
37 |
Correct |
65 ms |
6336 KB |
Output is correct |
38 |
Correct |
6 ms |
6604 KB |
Output is correct |
39 |
Correct |
5 ms |
6604 KB |
Output is correct |
40 |
Correct |
7 ms |
6604 KB |
Output is correct |
41 |
Correct |
23 ms |
6760 KB |
Output is correct |
42 |
Correct |
97 ms |
7104 KB |
Output is correct |
43 |
Correct |
45 ms |
20328 KB |
Output is correct |
44 |
Correct |
40 ms |
20224 KB |
Output is correct |
45 |
Correct |
45 ms |
20284 KB |
Output is correct |
46 |
Correct |
64 ms |
20400 KB |
Output is correct |
47 |
Correct |
150 ms |
20808 KB |
Output is correct |
48 |
Correct |
6 ms |
6604 KB |
Output is correct |
49 |
Correct |
31 ms |
6616 KB |
Output is correct |
50 |
Correct |
125 ms |
6820 KB |
Output is correct |
51 |
Correct |
245 ms |
7064 KB |
Output is correct |
52 |
Correct |
21 ms |
13980 KB |
Output is correct |
53 |
Correct |
60 ms |
14024 KB |
Output is correct |
54 |
Correct |
252 ms |
14300 KB |
Output is correct |
55 |
Correct |
508 ms |
14644 KB |
Output is correct |
56 |
Correct |
87 ms |
53172 KB |
Output is correct |
57 |
Correct |
163 ms |
53188 KB |
Output is correct |
58 |
Correct |
491 ms |
53388 KB |
Output is correct |
59 |
Correct |
888 ms |
53864 KB |
Output is correct |
60 |
Correct |
184 ms |
106392 KB |
Output is correct |
61 |
Correct |
257 ms |
106256 KB |
Output is correct |
62 |
Correct |
687 ms |
106708 KB |
Output is correct |
63 |
Correct |
1274 ms |
106888 KB |
Output is correct |
64 |
Correct |
2121 ms |
106792 KB |
Output is correct |
65 |
Correct |
1698 ms |
89828 KB |
Output is correct |
66 |
Correct |
1916 ms |
92308 KB |
Output is correct |
67 |
Correct |
1745 ms |
90740 KB |
Output is correct |
68 |
Correct |
1801 ms |
92744 KB |
Output is correct |
69 |
Correct |
1741 ms |
87688 KB |
Output is correct |
70 |
Correct |
1498 ms |
69548 KB |
Output is correct |
71 |
Correct |
2478 ms |
112692 KB |
Output is correct |
72 |
Correct |
2411 ms |
112588 KB |
Output is correct |
73 |
Correct |
2398 ms |
112464 KB |
Output is correct |
74 |
Correct |
2360 ms |
112036 KB |
Output is correct |
75 |
Correct |
2342 ms |
107120 KB |
Output is correct |
76 |
Correct |
2132 ms |
82016 KB |
Output is correct |
77 |
Correct |
3025 ms |
121416 KB |
Output is correct |
78 |
Correct |
3047 ms |
121592 KB |
Output is correct |
79 |
Correct |
2935 ms |
121612 KB |
Output is correct |
80 |
Correct |
2957 ms |
121280 KB |
Output is correct |
81 |
Correct |
2921 ms |
115764 KB |
Output is correct |
82 |
Correct |
2440 ms |
86372 KB |
Output is correct |
83 |
Correct |
2972 ms |
121612 KB |
Output is correct |
84 |
Correct |
3104 ms |
121632 KB |
Output is correct |
85 |
Correct |
2968 ms |
121504 KB |
Output is correct |
86 |
Correct |
3001 ms |
121264 KB |
Output is correct |
87 |
Correct |
2878 ms |
115816 KB |
Output is correct |
88 |
Correct |
2450 ms |
86396 KB |
Output is correct |
89 |
Correct |
1731 ms |
91028 KB |
Output is correct |
90 |
Correct |
1927 ms |
100352 KB |
Output is correct |
91 |
Correct |
2217 ms |
109592 KB |
Output is correct |
92 |
Correct |
2432 ms |
112380 KB |
Output is correct |
93 |
Correct |
2611 ms |
116256 KB |
Output is correct |
94 |
Correct |
2713 ms |
118632 KB |
Output is correct |
95 |
Correct |
2949 ms |
121340 KB |
Output is correct |
96 |
Correct |
3029 ms |
121324 KB |
Output is correct |
97 |
Correct |
2926 ms |
121556 KB |
Output is correct |
98 |
Correct |
3038 ms |
121560 KB |
Output is correct |
99 |
Correct |
2973 ms |
121632 KB |
Output is correct |
100 |
Correct |
2913 ms |
121460 KB |
Output is correct |