Submission #711994

# Submission time Handle Problem Language Result Execution time Memory
711994 2023-03-17T21:54:50 Z ssense Dynamic Diameter (CEOI19_diameter) C++17
100 / 100
391 ms 84488 KB
#include <bits/stdc++.h>
#define startt ios_base::sync_with_stdio(false);cin.tie(0);
typedef long long  ll;
using namespace std;
#define vint vector<int>
#define all(v) v.begin(), v.end()
#define MOD 1000000007
#define MOD2 998244353
#define MX 1000000000
#define MXL 1000000000000000000
#define PI (ld)2*acos(0.0)
#define pb push_back
#define sc second
#define fr first
#define int long long
#define endl '\n'
#define ld long double
#define NO cout << "NO" << endl
#define YES cout << "YES" << endl
int ceildiv(int one, int two) {if (one % two == 0) {return one / two;}else {return one / two + 1;}} int power(int n, int pow, int m) {if (pow == 0) return 1;if (pow % 2 == 0) {ll x = power(n, pow / 2, m);return (x * x) % m;}else return (power(n, pow - 1, m) * n) % m;} int gcd(int a, int b) { if (!b)return a; return gcd(b, a % b);} int factorial(int n, int mod) {if (n > 1)return (n * factorial(n - 1, mod)) % mod; else return 1;} int lcm(int a, int b) {return (a * b) / gcd(a, b);} vector<int> read(int n) {vector<int> a; for (int i = 0; i < n; i++) { int x; cin >> x; a.pb(x);} return a;}struct prefix_sum{vint pref;void build(vint a){pref.pb(0);for(int i = 0; i < a.size(); i++){pref.pb(pref.back()+a[i]);}}int get(int l, int r){return pref[r]-pref[l-1];}};//mesanu

int n, q, w;
vector<vector<pair<int, int>>> adj;
vector<int> tin, tout;

vector<int> tour;

void dfs(int u, int p, int dist)
{
    tin[u] = tour.size();
    tour.push_back(dist);
    for(auto v : adj[u])
    {
        if(v.first != p)
        {
            dfs(v.first, u, dist+v.second);
            tour.push_back(dist);
        }
    }
    tout[u] = tour.size();
    tour.push_back(dist);
}

struct node
{
    int d_max, d_min, d_left, d_right, ans;
};

vector<node> seg;
vector<int> lazy;

node merge(node a, node b)
{
    node temp;
    temp.ans = max({a.d_right + b.d_max, b.d_left + a.d_max, a.ans, b.ans});
    temp.d_right = max({a.d_right, b.d_right, a.d_max-2*b.d_min});
    temp.d_left = max({a.d_left, b.d_left, b.d_max-2*a.d_min});
    temp.d_max = max(a.d_max, b.d_max);
    temp.d_min = min(a.d_min, b.d_min);
    return temp;
}

void build(int l, int r, int v)
{
    lazy[v] = 0;
    if(l == r)
    {
        node temp;
        temp.d_max = tour[l];
        temp.d_min = tour[l];
        temp.ans = 0;
        temp.d_right = -tour[l];
        temp.d_left = -tour[l];
        seg[v] = temp;
        return;
    }
    build(l, (l+r)/2, 2*v+1);
    build((l+r)/2+1, r, 2*v+2);
    seg[v] = merge(seg[2*v+1], seg[2*v+2]);
}

void push(int v, int l, int r)
{
    if(lazy[v] == 0)
    {
        return;
    }
    seg[v].d_max+=lazy[v];
    seg[v].d_min+=lazy[v];
    seg[v].d_left-=lazy[v];
    seg[v].d_right-=lazy[v];
    if(l != r){
        lazy[2*v+1]+=lazy[v];
        lazy[2*v+2]+=lazy[v];
    }
    lazy[v] = 0;
}

void modif(int v, int l, int r, int tl, int tr, int val){
    push(v, l, r);
    if(l > tr || r < tl)return;

    if(l >= tl && r <= tr){
        lazy[v]+=val;
        push(v, l , r);
        return;
    }

    int mid = (l + r) >> 1;

    modif(2 * v + 1, l, mid, tl, tr, val);
    modif(2 * v + 2, mid + 1, r, tl, tr, val);

    seg[v] = merge(seg[2*v+1], seg[2*v+2]);
}




int32_t main(){
    startt
    cin >> n >> q >> w;
    adj.resize(n+1);
    tin.resize(n+1);
    tout.resize(n+1);
    map<pair<int, int>, int> mp;
    vector<pair<pair<int, int>, int>> ww;
    for(int i = 0; i < n-1; i++)
    {
        int u, v, w;
        cin >> u >> v >> w;
        adj[u].pb({v, w});
        adj[v].pb({u, w});
        ww.push_back({{u, v}, w});
    }
    dfs(1, 0, 0);
    seg.resize(4*tour.size()+4);
    lazy.resize(4*tour.size()+4);
    build(0, tour.size(), 0);
    //cout << seg[0].ans << endl;
    int last = 0;
    for(int i = 0; i < q; i++)
    {
        int dd, ee;
        cin >> dd >> ee;
        int d = (dd+last)%(n-1), e = (ee+last)%w;
        if(tin[ww[d].fr.fr] > tin[ww[d].fr.sc])
        {
            swap(ww[d].fr.fr, ww[d].fr.sc);
        }
        modif(0, 0, tour.size(), tin[ww[d].fr.sc], tout[ww[d].fr.sc], e-ww[d].sc);
        if(n == 2)
        {
            cout << e << endl;
            last = e;
            continue;
        }
        ww[d].sc = e;
        last = max(seg[0].ans, seg[0].d_max);
        cout << last << endl;
    }
}


Compilation message

diameter.cpp: In member function 'void prefix_sum::build(std::vector<long long int>)':
diameter.cpp:20:667: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   20 | int ceildiv(int one, int two) {if (one % two == 0) {return one / two;}else {return one / two + 1;}} int power(int n, int pow, int m) {if (pow == 0) return 1;if (pow % 2 == 0) {ll x = power(n, pow / 2, m);return (x * x) % m;}else return (power(n, pow - 1, m) * n) % m;} int gcd(int a, int b) { if (!b)return a; return gcd(b, a % b);} int factorial(int n, int mod) {if (n > 1)return (n * factorial(n - 1, mod)) % mod; else return 1;} int lcm(int a, int b) {return (a * b) / gcd(a, b);} vector<int> read(int n) {vector<int> a; for (int i = 0; i < n; i++) { int x; cin >> x; a.pb(x);} return a;}struct prefix_sum{vint pref;void build(vint a){pref.pb(0);for(int i = 0; i < a.size(); i++){pref.pb(pref.back()+a[i]);}}int get(int l, int r){return pref[r]-pref[l-1];}};//mesanu
      |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 328 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 1 ms 320 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 328 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 1 ms 320 KB Output is correct
19 Correct 5 ms 1132 KB Output is correct
20 Correct 5 ms 1108 KB Output is correct
21 Correct 5 ms 1156 KB Output is correct
22 Correct 6 ms 1100 KB Output is correct
23 Correct 8 ms 4060 KB Output is correct
24 Correct 9 ms 4152 KB Output is correct
25 Correct 9 ms 4188 KB Output is correct
26 Correct 11 ms 4488 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 328 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 8 ms 460 KB Output is correct
5 Correct 41 ms 1364 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 596 KB Output is correct
8 Correct 1 ms 596 KB Output is correct
9 Correct 2 ms 728 KB Output is correct
10 Correct 11 ms 944 KB Output is correct
11 Correct 55 ms 1996 KB Output is correct
12 Correct 4 ms 3988 KB Output is correct
13 Correct 4 ms 3992 KB Output is correct
14 Correct 5 ms 3980 KB Output is correct
15 Correct 16 ms 4232 KB Output is correct
16 Correct 69 ms 5432 KB Output is correct
17 Correct 65 ms 73232 KB Output is correct
18 Correct 67 ms 73224 KB Output is correct
19 Correct 65 ms 73260 KB Output is correct
20 Correct 84 ms 73580 KB Output is correct
21 Correct 207 ms 74880 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1108 KB Output is correct
2 Correct 10 ms 1228 KB Output is correct
3 Correct 39 ms 1692 KB Output is correct
4 Correct 74 ms 2432 KB Output is correct
5 Correct 8 ms 7708 KB Output is correct
6 Correct 18 ms 7932 KB Output is correct
7 Correct 56 ms 8480 KB Output is correct
8 Correct 100 ms 9344 KB Output is correct
9 Correct 37 ms 37340 KB Output is correct
10 Correct 53 ms 37408 KB Output is correct
11 Correct 100 ms 38240 KB Output is correct
12 Correct 156 ms 38904 KB Output is correct
13 Correct 73 ms 74320 KB Output is correct
14 Correct 84 ms 74520 KB Output is correct
15 Correct 154 ms 75124 KB Output is correct
16 Correct 212 ms 76068 KB Output is correct
17 Correct 200 ms 75792 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 260 ms 78232 KB Output is correct
2 Correct 250 ms 78236 KB Output is correct
3 Correct 269 ms 78260 KB Output is correct
4 Correct 256 ms 78252 KB Output is correct
5 Correct 248 ms 78012 KB Output is correct
6 Correct 231 ms 78020 KB Output is correct
7 Correct 278 ms 80584 KB Output is correct
8 Correct 274 ms 80748 KB Output is correct
9 Correct 283 ms 80692 KB Output is correct
10 Correct 269 ms 80632 KB Output is correct
11 Correct 272 ms 80360 KB Output is correct
12 Correct 279 ms 79616 KB Output is correct
13 Correct 339 ms 84488 KB Output is correct
14 Correct 320 ms 84360 KB Output is correct
15 Correct 318 ms 84400 KB Output is correct
16 Correct 313 ms 84300 KB Output is correct
17 Correct 363 ms 83760 KB Output is correct
18 Correct 296 ms 80960 KB Output is correct
19 Correct 302 ms 84340 KB Output is correct
20 Correct 342 ms 84324 KB Output is correct
21 Correct 327 ms 84436 KB Output is correct
22 Correct 330 ms 84348 KB Output is correct
23 Correct 391 ms 83768 KB Output is correct
24 Correct 295 ms 80972 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 328 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 1 ms 320 KB Output is correct
19 Correct 5 ms 1132 KB Output is correct
20 Correct 5 ms 1108 KB Output is correct
21 Correct 5 ms 1156 KB Output is correct
22 Correct 6 ms 1100 KB Output is correct
23 Correct 8 ms 4060 KB Output is correct
24 Correct 9 ms 4152 KB Output is correct
25 Correct 9 ms 4188 KB Output is correct
26 Correct 11 ms 4488 KB Output is correct
27 Correct 1 ms 212 KB Output is correct
28 Correct 1 ms 328 KB Output is correct
29 Correct 1 ms 340 KB Output is correct
30 Correct 8 ms 460 KB Output is correct
31 Correct 41 ms 1364 KB Output is correct
32 Correct 1 ms 212 KB Output is correct
33 Correct 1 ms 596 KB Output is correct
34 Correct 1 ms 596 KB Output is correct
35 Correct 2 ms 728 KB Output is correct
36 Correct 11 ms 944 KB Output is correct
37 Correct 55 ms 1996 KB Output is correct
38 Correct 4 ms 3988 KB Output is correct
39 Correct 4 ms 3992 KB Output is correct
40 Correct 5 ms 3980 KB Output is correct
41 Correct 16 ms 4232 KB Output is correct
42 Correct 69 ms 5432 KB Output is correct
43 Correct 65 ms 73232 KB Output is correct
44 Correct 67 ms 73224 KB Output is correct
45 Correct 65 ms 73260 KB Output is correct
46 Correct 84 ms 73580 KB Output is correct
47 Correct 207 ms 74880 KB Output is correct
48 Correct 2 ms 1108 KB Output is correct
49 Correct 10 ms 1228 KB Output is correct
50 Correct 39 ms 1692 KB Output is correct
51 Correct 74 ms 2432 KB Output is correct
52 Correct 8 ms 7708 KB Output is correct
53 Correct 18 ms 7932 KB Output is correct
54 Correct 56 ms 8480 KB Output is correct
55 Correct 100 ms 9344 KB Output is correct
56 Correct 37 ms 37340 KB Output is correct
57 Correct 53 ms 37408 KB Output is correct
58 Correct 100 ms 38240 KB Output is correct
59 Correct 156 ms 38904 KB Output is correct
60 Correct 73 ms 74320 KB Output is correct
61 Correct 84 ms 74520 KB Output is correct
62 Correct 154 ms 75124 KB Output is correct
63 Correct 212 ms 76068 KB Output is correct
64 Correct 200 ms 75792 KB Output is correct
65 Correct 260 ms 78232 KB Output is correct
66 Correct 250 ms 78236 KB Output is correct
67 Correct 269 ms 78260 KB Output is correct
68 Correct 256 ms 78252 KB Output is correct
69 Correct 248 ms 78012 KB Output is correct
70 Correct 231 ms 78020 KB Output is correct
71 Correct 278 ms 80584 KB Output is correct
72 Correct 274 ms 80748 KB Output is correct
73 Correct 283 ms 80692 KB Output is correct
74 Correct 269 ms 80632 KB Output is correct
75 Correct 272 ms 80360 KB Output is correct
76 Correct 279 ms 79616 KB Output is correct
77 Correct 339 ms 84488 KB Output is correct
78 Correct 320 ms 84360 KB Output is correct
79 Correct 318 ms 84400 KB Output is correct
80 Correct 313 ms 84300 KB Output is correct
81 Correct 363 ms 83760 KB Output is correct
82 Correct 296 ms 80960 KB Output is correct
83 Correct 302 ms 84340 KB Output is correct
84 Correct 342 ms 84324 KB Output is correct
85 Correct 327 ms 84436 KB Output is correct
86 Correct 330 ms 84348 KB Output is correct
87 Correct 391 ms 83768 KB Output is correct
88 Correct 295 ms 80972 KB Output is correct
89 Correct 260 ms 77188 KB Output is correct
90 Correct 286 ms 77512 KB Output is correct
91 Correct 264 ms 78832 KB Output is correct
92 Correct 276 ms 78904 KB Output is correct
93 Correct 292 ms 81208 KB Output is correct
94 Correct 323 ms 80272 KB Output is correct
95 Correct 329 ms 81824 KB Output is correct
96 Correct 315 ms 80888 KB Output is correct
97 Correct 343 ms 81696 KB Output is correct
98 Correct 315 ms 83540 KB Output is correct
99 Correct 322 ms 81440 KB Output is correct
100 Correct 331 ms 81432 KB Output is correct