#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int NMAX(100005);
vector<pair<int, ll> > G[NMAX];
vector<pair<int, int> > frati[NMAX];
multiset<ll> vec[NMAX];
map<int, ll> cum[NMAX];
map<pair<int, int>, vector<pair<int, int> > > mp;
bool dead[NMAX], mark[NMAX], viz[NMAX];
int pas, dim, sz[NMAX], tip[NMAX], cnt, baza, mov, id[NMAX];
ll dist[NMAX], maxx[NMAX];
struct SEGTREE
{
vector<ll> Arb, lazy;
vector<int> in, out;
int cati;
inline void init(int n)
{
cati = n;
int put = 1;
while(put <= n)
put <<= 1;
put <<= 1;
Arb.resize(put), in.resize(put), out.resize(put), lazy.resize(put << 1);
}
inline void build(int nod, int st, int dr)
{
if(st == dr)
{
Arb[nod] = dist[st];
return;
}
int mij = (st + dr) / 2;
build(2 * nod, st, mij);
build(2 * nod + 1, mij + 1, dr);
Arb[nod] = max(Arb[2 * nod], Arb[2 * nod + 1]);
}
inline void push(int nod)
{
if(lazy[nod])
{
Arb[nod] += lazy[nod];
lazy[2 * nod] += lazy[nod];
lazy[2 * nod + 1] += lazy[nod];
lazy[nod] = 0;
}
}
inline void update(int nod, int st, int dr, int a, int b, ll val)
{
if(a <= st && dr <= b)
{
lazy[nod] += val;
push(nod);
return;
}
push(nod);
int mij = (st + dr) / 2;
if(a <= mij)
update(2 * nod, st, mij, a, b, val);
if(b > mij)
update(2 * nod + 1, mij + 1, dr, a, b, val);
push(2 * nod), push(2 * nod + 1);
Arb[nod] = max(Arb[2 * nod], Arb[2 * nod + 1]);
}
inline ll query(int nod, int st, int dr, int a, int b)
{
push(nod);
if(a <= st && dr <= b)
return Arb[nod];
int mij = (st + dr) / 2;
ll rez1 = 0, rez2 = 0;
if(a <= mij)
rez1 = query(2 * nod, st, mij, a, b);
if(b > mij)
rez2 = query(2 * nod + 1, mij + 1, dr, a, b);
return max(rez1, rez2);
}
} interv[NMAX];
inline int getC(int nod)
{
viz[nod] = 1;
sz[nod] = 1;
int maxx = 0;
for(auto it: G[nod])
if(!viz[it.first] && mark[it.first])
{
int c = getC(it.first);
if(c != -1)
return c;
sz[nod] += sz[it.first];
maxx = max(maxx, sz[it.first]);
}
maxx = max(maxx, dim - sz[nod]);
if(maxx <= dim / 2)
return nod;
return -1;
}
inline void DFS(int nod)
{
viz[nod] = 1;
tip[nod] = cnt;
for(auto it: G[nod])
if(!viz[it.first] && mark[it.first])
DFS(it.first);
}
inline void buildTree(int nod, int tata = -1)
{
interv[baza].in[id[nod]] = ++mov;
for(auto it: G[nod])
if(tata != it.first && mark[it.first])
{
mp[ {min(it.first, nod), max(it.first, nod)}].push_back({id[it.first], baza});
dist[mov + 1] = dist[interv[baza].in[id[nod]]] + it.second;
buildTree(it.first, nod);
}
interv[baza].out[id[nod]] = mov;
}
inline void centroidDecomp(vector<int> nodes)
{
if(nodes.size() == 1)
return;
int mr = 0;
for(auto it: nodes)
mark[it] = 1, sz[it] = tip[it] = 0, viz[it] = 0, id[it] = ++mr;
dim = nodes.size();
int cen = getC(nodes[0]);
baza = cen;
mov = dist[1] = 0;
interv[baza].init(nodes.size());
buildTree(cen);
interv[baza].build(1, 1, nodes.size());
for(auto it: nodes)
viz[it] = 0;
viz[cen] = 1;
cnt = 0;
for(auto it: G[cen])
if(!viz[it.first] && mark[it.first])
{
frati[cen].push_back({interv[baza].in[id[it.first]], id[it.first]});
++cnt;
DFS(it.first);
}
vector<vector<int> > nex(cnt + 1);
for(auto it: nodes)
nex[tip[it]].push_back(it);
for(auto it: nodes)
mark[it] = 0, sz[it] = tip[it] = 0, viz[it] = 0;
int nn = cnt;
for(int i = 1; i <= nn; ++i)
centroidDecomp(nex[i]);
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int n, q;
ll w;
cin >> n >> q >> w;
vector<tuple<int, int, ll> > Muchie;
for(int i = 1; i < n; ++i)
{
int a, b;
ll c;
cin >> a >> b >> c;
Muchie.push_back(make_tuple(min(a, b), max(a, b), c));
G[a].push_back({b, c});
G[b].push_back({a, c});
}
vector<int> noduri;
for(int i = 1; i <= n; ++i)
noduri.push_back(i);
centroidDecomp(noduri);
auto calc = [](int i, bool da)
{
if(da)
{
for(auto it: frati[i])
{
ll val = interv[i].query(1, 1, interv[i].cati, interv[i].in[it.second], interv[i].out[it.second]);
vec[i].insert(val);
cum[i][it.second] = val;
}
}
auto it = vec[i].end();
--it;
ll rz = *it;
if(vec[i].size() >= 2)
{
--it;
rz += *it;
}
return rz;
};
multiset<ll> s;
for(int i = 1; i <= n; ++i)
if(frati[i].size())
maxx[i] = calc(i, 1), s.insert(-maxx[i]);
ll last = 0;
for(int i = 1; i <= q; ++i)
{
int d;
ll e;
cin >> d >> e;
d = (d + last) % (n - 1);
e = (e + last) % w;
int x, y;
ll c;
tie(x, y, c) = Muchie[d];
for(auto it: mp[ {x, y}])
{
interv[it.second].update(1, 1, interv[it.second].cati, interv[it.second].in[it.first], interv[it.second].out[it.first], e - c);
auto ind = upper_bound(frati[it.second].begin(), frati[it.second].end(), make_pair(interv[it.second].in[it.first], 2 * NMAX));
--ind;
int careF = ind->second;
ll newV = interv[it.second].query(1, 1, interv[it.second].cati, interv[it.second].in[careF], interv[it.second].out[careF]);
vec[it.second].erase(vec[it.second].find(cum[it.second][careF]));
vec[it.second].insert(newV);
cum[it.second][careF] = newV;
s.erase(s.find(-maxx[it.second]));
maxx[it.second] = calc(it.second, 0);
s.insert(-maxx[it.second]);
}
Muchie[d] = make_tuple(x, y, e);
cout << -*s.begin() << '\n';
last = -*s.begin();
}
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
13 ms |
24524 KB |
Output is correct |
2 |
Correct |
12 ms |
24564 KB |
Output is correct |
3 |
Correct |
12 ms |
24524 KB |
Output is correct |
4 |
Correct |
13 ms |
24524 KB |
Output is correct |
5 |
Correct |
13 ms |
24524 KB |
Output is correct |
6 |
Correct |
14 ms |
24524 KB |
Output is correct |
7 |
Correct |
15 ms |
24524 KB |
Output is correct |
8 |
Correct |
16 ms |
24640 KB |
Output is correct |
9 |
Correct |
14 ms |
24584 KB |
Output is correct |
10 |
Correct |
13 ms |
24604 KB |
Output is correct |
11 |
Correct |
13 ms |
24588 KB |
Output is correct |
12 |
Correct |
12 ms |
24540 KB |
Output is correct |
13 |
Correct |
13 ms |
24608 KB |
Output is correct |
14 |
Correct |
15 ms |
24652 KB |
Output is correct |
15 |
Correct |
13 ms |
24652 KB |
Output is correct |
16 |
Correct |
17 ms |
24616 KB |
Output is correct |
17 |
Correct |
12 ms |
24652 KB |
Output is correct |
18 |
Correct |
13 ms |
24712 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
13 ms |
24524 KB |
Output is correct |
2 |
Correct |
12 ms |
24564 KB |
Output is correct |
3 |
Correct |
12 ms |
24524 KB |
Output is correct |
4 |
Correct |
13 ms |
24524 KB |
Output is correct |
5 |
Correct |
13 ms |
24524 KB |
Output is correct |
6 |
Correct |
14 ms |
24524 KB |
Output is correct |
7 |
Correct |
15 ms |
24524 KB |
Output is correct |
8 |
Correct |
16 ms |
24640 KB |
Output is correct |
9 |
Correct |
14 ms |
24584 KB |
Output is correct |
10 |
Correct |
13 ms |
24604 KB |
Output is correct |
11 |
Correct |
13 ms |
24588 KB |
Output is correct |
12 |
Correct |
12 ms |
24540 KB |
Output is correct |
13 |
Correct |
13 ms |
24608 KB |
Output is correct |
14 |
Correct |
15 ms |
24652 KB |
Output is correct |
15 |
Correct |
13 ms |
24652 KB |
Output is correct |
16 |
Correct |
17 ms |
24616 KB |
Output is correct |
17 |
Correct |
12 ms |
24652 KB |
Output is correct |
18 |
Correct |
13 ms |
24712 KB |
Output is correct |
19 |
Correct |
35 ms |
25540 KB |
Output is correct |
20 |
Correct |
32 ms |
25664 KB |
Output is correct |
21 |
Correct |
38 ms |
25628 KB |
Output is correct |
22 |
Correct |
39 ms |
25816 KB |
Output is correct |
23 |
Correct |
70 ms |
29972 KB |
Output is correct |
24 |
Correct |
71 ms |
31192 KB |
Output is correct |
25 |
Correct |
68 ms |
32056 KB |
Output is correct |
26 |
Correct |
78 ms |
33424 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
12 ms |
24536 KB |
Output is correct |
2 |
Correct |
12 ms |
24516 KB |
Output is correct |
3 |
Correct |
18 ms |
24588 KB |
Output is correct |
4 |
Correct |
26 ms |
24780 KB |
Output is correct |
5 |
Correct |
76 ms |
25732 KB |
Output is correct |
6 |
Correct |
16 ms |
24512 KB |
Output is correct |
7 |
Correct |
14 ms |
24780 KB |
Output is correct |
8 |
Correct |
14 ms |
24748 KB |
Output is correct |
9 |
Correct |
16 ms |
24780 KB |
Output is correct |
10 |
Correct |
33 ms |
25028 KB |
Output is correct |
11 |
Correct |
107 ms |
26052 KB |
Output is correct |
12 |
Correct |
19 ms |
26696 KB |
Output is correct |
13 |
Correct |
20 ms |
26772 KB |
Output is correct |
14 |
Correct |
21 ms |
26828 KB |
Output is correct |
15 |
Correct |
57 ms |
27012 KB |
Output is correct |
16 |
Correct |
157 ms |
28228 KB |
Output is correct |
17 |
Correct |
177 ms |
65536 KB |
Output is correct |
18 |
Correct |
182 ms |
65528 KB |
Output is correct |
19 |
Correct |
183 ms |
65472 KB |
Output is correct |
20 |
Correct |
249 ms |
65768 KB |
Output is correct |
21 |
Correct |
655 ms |
66248 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
18 ms |
25616 KB |
Output is correct |
2 |
Correct |
45 ms |
25676 KB |
Output is correct |
3 |
Correct |
164 ms |
26256 KB |
Output is correct |
4 |
Correct |
268 ms |
26940 KB |
Output is correct |
5 |
Correct |
52 ms |
37696 KB |
Output is correct |
6 |
Correct |
92 ms |
37852 KB |
Output is correct |
7 |
Correct |
303 ms |
38520 KB |
Output is correct |
8 |
Correct |
569 ms |
39304 KB |
Output is correct |
9 |
Correct |
268 ms |
96940 KB |
Output is correct |
10 |
Correct |
300 ms |
97148 KB |
Output is correct |
11 |
Correct |
686 ms |
97644 KB |
Output is correct |
12 |
Correct |
1134 ms |
97924 KB |
Output is correct |
13 |
Correct |
446 ms |
175264 KB |
Output is correct |
14 |
Correct |
590 ms |
175228 KB |
Output is correct |
15 |
Correct |
1006 ms |
175652 KB |
Output is correct |
16 |
Correct |
1608 ms |
175920 KB |
Output is correct |
17 |
Correct |
3103 ms |
175892 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3041 ms |
172252 KB |
Output is correct |
2 |
Correct |
3126 ms |
176048 KB |
Output is correct |
3 |
Correct |
3042 ms |
174648 KB |
Output is correct |
4 |
Correct |
3011 ms |
176988 KB |
Output is correct |
5 |
Correct |
2843 ms |
169448 KB |
Output is correct |
6 |
Correct |
2477 ms |
127020 KB |
Output is correct |
7 |
Correct |
3961 ms |
204188 KB |
Output is correct |
8 |
Correct |
3952 ms |
204332 KB |
Output is correct |
9 |
Correct |
4157 ms |
204140 KB |
Output is correct |
10 |
Correct |
3982 ms |
203560 KB |
Output is correct |
11 |
Correct |
3762 ms |
193808 KB |
Output is correct |
12 |
Correct |
3027 ms |
143648 KB |
Output is correct |
13 |
Correct |
3813 ms |
217656 KB |
Output is correct |
14 |
Correct |
3852 ms |
217472 KB |
Output is correct |
15 |
Correct |
3793 ms |
217628 KB |
Output is correct |
16 |
Correct |
3844 ms |
216676 KB |
Output is correct |
17 |
Correct |
3657 ms |
206204 KB |
Output is correct |
18 |
Correct |
2854 ms |
149576 KB |
Output is correct |
19 |
Correct |
4115 ms |
216964 KB |
Output is correct |
20 |
Correct |
3869 ms |
216656 KB |
Output is correct |
21 |
Correct |
3891 ms |
216584 KB |
Output is correct |
22 |
Correct |
3846 ms |
215800 KB |
Output is correct |
23 |
Correct |
3529 ms |
205484 KB |
Output is correct |
24 |
Correct |
2804 ms |
148716 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
13 ms |
24524 KB |
Output is correct |
2 |
Correct |
12 ms |
24564 KB |
Output is correct |
3 |
Correct |
12 ms |
24524 KB |
Output is correct |
4 |
Correct |
13 ms |
24524 KB |
Output is correct |
5 |
Correct |
13 ms |
24524 KB |
Output is correct |
6 |
Correct |
14 ms |
24524 KB |
Output is correct |
7 |
Correct |
15 ms |
24524 KB |
Output is correct |
8 |
Correct |
16 ms |
24640 KB |
Output is correct |
9 |
Correct |
14 ms |
24584 KB |
Output is correct |
10 |
Correct |
13 ms |
24604 KB |
Output is correct |
11 |
Correct |
13 ms |
24588 KB |
Output is correct |
12 |
Correct |
12 ms |
24540 KB |
Output is correct |
13 |
Correct |
13 ms |
24608 KB |
Output is correct |
14 |
Correct |
15 ms |
24652 KB |
Output is correct |
15 |
Correct |
13 ms |
24652 KB |
Output is correct |
16 |
Correct |
17 ms |
24616 KB |
Output is correct |
17 |
Correct |
12 ms |
24652 KB |
Output is correct |
18 |
Correct |
13 ms |
24712 KB |
Output is correct |
19 |
Correct |
35 ms |
25540 KB |
Output is correct |
20 |
Correct |
32 ms |
25664 KB |
Output is correct |
21 |
Correct |
38 ms |
25628 KB |
Output is correct |
22 |
Correct |
39 ms |
25816 KB |
Output is correct |
23 |
Correct |
70 ms |
29972 KB |
Output is correct |
24 |
Correct |
71 ms |
31192 KB |
Output is correct |
25 |
Correct |
68 ms |
32056 KB |
Output is correct |
26 |
Correct |
78 ms |
33424 KB |
Output is correct |
27 |
Correct |
12 ms |
24536 KB |
Output is correct |
28 |
Correct |
12 ms |
24516 KB |
Output is correct |
29 |
Correct |
18 ms |
24588 KB |
Output is correct |
30 |
Correct |
26 ms |
24780 KB |
Output is correct |
31 |
Correct |
76 ms |
25732 KB |
Output is correct |
32 |
Correct |
16 ms |
24512 KB |
Output is correct |
33 |
Correct |
14 ms |
24780 KB |
Output is correct |
34 |
Correct |
14 ms |
24748 KB |
Output is correct |
35 |
Correct |
16 ms |
24780 KB |
Output is correct |
36 |
Correct |
33 ms |
25028 KB |
Output is correct |
37 |
Correct |
107 ms |
26052 KB |
Output is correct |
38 |
Correct |
19 ms |
26696 KB |
Output is correct |
39 |
Correct |
20 ms |
26772 KB |
Output is correct |
40 |
Correct |
21 ms |
26828 KB |
Output is correct |
41 |
Correct |
57 ms |
27012 KB |
Output is correct |
42 |
Correct |
157 ms |
28228 KB |
Output is correct |
43 |
Correct |
177 ms |
65536 KB |
Output is correct |
44 |
Correct |
182 ms |
65528 KB |
Output is correct |
45 |
Correct |
183 ms |
65472 KB |
Output is correct |
46 |
Correct |
249 ms |
65768 KB |
Output is correct |
47 |
Correct |
655 ms |
66248 KB |
Output is correct |
48 |
Correct |
18 ms |
25616 KB |
Output is correct |
49 |
Correct |
45 ms |
25676 KB |
Output is correct |
50 |
Correct |
164 ms |
26256 KB |
Output is correct |
51 |
Correct |
268 ms |
26940 KB |
Output is correct |
52 |
Correct |
52 ms |
37696 KB |
Output is correct |
53 |
Correct |
92 ms |
37852 KB |
Output is correct |
54 |
Correct |
303 ms |
38520 KB |
Output is correct |
55 |
Correct |
569 ms |
39304 KB |
Output is correct |
56 |
Correct |
268 ms |
96940 KB |
Output is correct |
57 |
Correct |
300 ms |
97148 KB |
Output is correct |
58 |
Correct |
686 ms |
97644 KB |
Output is correct |
59 |
Correct |
1134 ms |
97924 KB |
Output is correct |
60 |
Correct |
446 ms |
175264 KB |
Output is correct |
61 |
Correct |
590 ms |
175228 KB |
Output is correct |
62 |
Correct |
1006 ms |
175652 KB |
Output is correct |
63 |
Correct |
1608 ms |
175920 KB |
Output is correct |
64 |
Correct |
3103 ms |
175892 KB |
Output is correct |
65 |
Correct |
3041 ms |
172252 KB |
Output is correct |
66 |
Correct |
3126 ms |
176048 KB |
Output is correct |
67 |
Correct |
3042 ms |
174648 KB |
Output is correct |
68 |
Correct |
3011 ms |
176988 KB |
Output is correct |
69 |
Correct |
2843 ms |
169448 KB |
Output is correct |
70 |
Correct |
2477 ms |
127020 KB |
Output is correct |
71 |
Correct |
3961 ms |
204188 KB |
Output is correct |
72 |
Correct |
3952 ms |
204332 KB |
Output is correct |
73 |
Correct |
4157 ms |
204140 KB |
Output is correct |
74 |
Correct |
3982 ms |
203560 KB |
Output is correct |
75 |
Correct |
3762 ms |
193808 KB |
Output is correct |
76 |
Correct |
3027 ms |
143648 KB |
Output is correct |
77 |
Correct |
3813 ms |
217656 KB |
Output is correct |
78 |
Correct |
3852 ms |
217472 KB |
Output is correct |
79 |
Correct |
3793 ms |
217628 KB |
Output is correct |
80 |
Correct |
3844 ms |
216676 KB |
Output is correct |
81 |
Correct |
3657 ms |
206204 KB |
Output is correct |
82 |
Correct |
2854 ms |
149576 KB |
Output is correct |
83 |
Correct |
4115 ms |
216964 KB |
Output is correct |
84 |
Correct |
3869 ms |
216656 KB |
Output is correct |
85 |
Correct |
3891 ms |
216584 KB |
Output is correct |
86 |
Correct |
3846 ms |
215800 KB |
Output is correct |
87 |
Correct |
3529 ms |
205484 KB |
Output is correct |
88 |
Correct |
2804 ms |
148716 KB |
Output is correct |
89 |
Correct |
2805 ms |
176168 KB |
Output is correct |
90 |
Correct |
3134 ms |
187840 KB |
Output is correct |
91 |
Correct |
3515 ms |
202288 KB |
Output is correct |
92 |
Correct |
3647 ms |
206512 KB |
Output is correct |
93 |
Correct |
3818 ms |
211292 KB |
Output is correct |
94 |
Correct |
3793 ms |
215488 KB |
Output is correct |
95 |
Correct |
3788 ms |
220004 KB |
Output is correct |
96 |
Correct |
3851 ms |
220000 KB |
Output is correct |
97 |
Correct |
3812 ms |
220044 KB |
Output is correct |
98 |
Correct |
3662 ms |
219944 KB |
Output is correct |
99 |
Correct |
3688 ms |
220056 KB |
Output is correct |
100 |
Correct |
3631 ms |
220228 KB |
Output is correct |