Submission #40752943


Source Code Expand

#include <bits/stdc++.h>

using i64 = long long;

constexpr int M = 1 << 17;
constexpr int inf = 1E9 + 1;

int A[M], B[M];

i64 sumA[2 * M];
int minB[2 * M];

bool cmp(int i, int j) {
    return B[i] < B[j];
}

void pull(int p, int l, int r) {
    int m = (l + r) / 2;
    sumA[p] = sumA[2 * p] + sumA[2 * p + 1];
    minB[p] = std::min({minB[2 * p], minB[2 * p + 1], m}, cmp);
}

void build(int p, int l, int r) {
    if (r - l == 1) {
        sumA[p] = A[l];
        return;
    }
    int m = (l + r) / 2;
    build(2 * p, l, m);
    build(2 * p + 1, m, r);
    pull(p, l, r);
}

void modifyA(int p, int l, int r, int x, int y) {
    if (r - l == 1) {
        sumA[p] = y;
        return;
    }
    int m = (l + r) / 2;
    if (x < m) {
        modifyA(2 * p, l, m, x, y);
    } else {
        modifyA(2 * p + 1, m, r, x, y);
    }
    pull(p, l, r);
}

void modifyB(int p, int l, int r, int x) {
    if (l >= x || r <= x) {
        return;
    }
    int m = (l + r) / 2;
    modifyB(2 * p, l, m, x);
    modifyB(2 * p + 1, m, r, x);
    pull(p, l, r);
}

i64 queryA(int p, int l, int r, int x, int y) {
    if (l >= y || r <= x) {
        return 0;
    }
    if (l >= x && r <= y) {
        return sumA[p];
    }
    int m = (l + r) / 2;
    return queryA(2 * p, l, m, x, y) + queryA(2 * p + 1, m, r, x, y);
}

int queryB(int p, int l, int r, int x, int y) {
    if (l >= y || r <= x) {
        return 0;
    }
    if (l >= x && r <= y) {
        return minB[p];
    }
    int m = (l + r) / 2;
    int res = std::min(queryB(2 * p, l, m, x, y), queryB(2 * p + 1, m, r, x, y), cmp);
    if (x < m && m < y) {
        res = std::min(res, m, cmp);
    }
    return res;
}

int findA(int p, int l, int r, int x, i64 &v) {
    if (r <= x) {
        return -1;
    }
    if (l >= x) {
        if (v >= sumA[p]) {
            v -= sumA[p];
            return -1;
        }
    }
    if (r - l == 1) {
        return r;
    }
    int m = (l + r) / 2;
    int res = findA(2 * p, l, m, x, v);
    if (res == -1) {
        res = findA(2 * p + 1, m, r, x, v);
    }
    return res;
}

int findAR(int p, int l, int r, int x, i64 &v) {
    if (l >= x) {
        return -1;
    }
    if (r <= x) {
        if (v >= sumA[p]) {
            v -= sumA[p];
            return -1;
        }
    }
    if (r - l == 1) {
        return l;
    }
    int m = (l + r) / 2;
    int res = findAR(2 * p + 1, m, r, x, v);
    if (res == -1) {
        res = findAR(2 * p, l, m, x, v);
    }
    return res;
}

int findSufB(int p, int l, int r, int x, int v) {
    if (l >= x || B[minB[p]] > v) {
        return l;
    }
    int m = (l + r) / 2;
    int res = findSufB(2 * p + 1, m, r, x, v);
    if (res == m && (x < m || B[m] > v)) {
        res = findSufB(2 * p, l, m, x, v);
    }
    return res;
}

int findPreB(int p, int l, int r, int x, int v) {
    if (r <= x || B[minB[p]] > v) {
        return r;
    }
    int m = (l + r) / 2;
    int res = findPreB(2 * p, l, m, x, v);
    if (res == m && (x > m || B[m] > v)) {
        res = findPreB(2 * p + 1, m, r, x, v);
    }
    return res;
}

int node(int l, int r) {
    int t = __builtin_ctz(r - l);
    return (1 << (17 - t)) + (l >> t);
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    B[0] = inf;
    
    int N;
    std::cin >> N;
    
    for (int i = 0; i < N; i++) {
        std::cin >> A[i];
    }
    for (int i = 1; i < N; i++) {
        std::cin >> B[i];
    }
    B[N] = inf;
    
    build(1, 0, M);
    
    int Q;
    std::cin >> Q;
    
    while (Q--) {
        int T, P, V, L, R;
        std::cin >> T >> P >> V >> L >> R;
        L--;
        
        if (T == 1) {
            P--;
            A[P] = V;
            modifyA(1, 0, M, P, V);
        } else {
            B[P] = V;
            modifyB(1, 0, M, P);
        }
        
        while (R - L > 1) {
            i64 S = queryA(1, 0, M, L, R);
            i64 val = (S - 1) / 2;
            int p = findA(1, 0, M, L, val) - 1;
            
            int l1 = L, r1 = p, l2 = p + 1, r2 = R;
            i64 smid = A[p];
            int bl = inf, br = inf;
            
            while (r1 - l1 > 1 && r2 - l2 > 1) {
                int m1 = r1 - (r1 & -r1);
                int m2 = l2 + (l2 & -l2);
                if (m1 <= l1) {
                    m1 = r1 - (1 << std::__lg(r1 - l1 - 1));
                }
                if (m2 >= r2) {
                    m2 = l2 + (1 << std::__lg(r2 - l2 - 1));
                }
                int u = node(m1, r1);
                int v = node(l2, m2);
                i64 s = smid + sumA[u] + sumA[v];
                int Bl = std::min({bl, minB[u], B[r1]});
                int Br = std::min({br, minB[v], B[l2]});
                
                if (s > S / 2) {
                    if (Bl < Br) {
                        l1 = m1;
                    } else {
                        r2 = m2;
                    }
                } else {
                    if (Bl < Br) {
                        l2 = m2;
                        smid += sumA[v];
                        br = Br;
                    } else {
                        r1 = m1;
                        smid += sumA[u];
                        bl = Bl;
                    }
                }
            }
            
            int l, r;
            int vb = 0;
            
            if (r1 - l1 <= 1) {
                for (int i = l1; i <= r1; i++) {
                    i64 val = S / 2;
                    int j = findA(1, 0, M, i, val);
                    int q = B[queryB(1, 0, M, i, j)];
                    if (q > vb) {
                        l = i;
                        r = j;
                        vb = q;
                    }
                }
            } else {
                for (int j = l2; j <= r2; j++) {
                    i64 val = S / 2;
                    int i = findAR(1, 0, M, j, val);
                    int q = B[queryB(1, 0, M, i, j)];
                    if (q > vb) {
                        l = i;
                        r = j;
                        vb = q;
                    }
                }
            }
            
            L = std::max(L, findSufB(1, 0, M, l, vb));
            R = std::min(R, findPreB(1, 0, M, r, vb));
            
            if (R - L == 1) {
                break;
            }
            
            int m = queryB(1, 0, M, L, R);
            if (queryA(1, 0, M, L, m) >= queryA(1, 0, M, m, R)) {
                R = m;
            } else {
                L = m;
            }
        }
        
        std::cout << R << "\n";
    }
    
    return 0;
}

Submission Info

Submission Time
Task H - Habatu
User jiangly
Language C++ (GCC 9.2.1)
Score 900
Code Size 6891 Byte
Status AC
Exec Time 4648 ms
Memory 6992 KiB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:262:37: warning: ‘r’ may be used uninitialized in this function [-Wmaybe-uninitialized]
  262 |             R = std::min(R, findPreB(1, 0, M, r, vb));
      |                             ~~~~~~~~^~~~~~~~~~~~~~~~
./Main.cpp:261:37: warning: ‘l’ may be used uninitialized in this function [-Wmaybe-uninitialized]
  261 |             L = std::max(L, findSufB(1, 0, M, l, vb));
      |                             ~~~~~~~~^~~~~~~~~~~~~~~~

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3 Subtask4 Subtask5
Score / Max Score 0 / 0 100 / 100 150 / 150 350 / 350 200 / 200 100 / 100
Status
AC × 5
AC × 26
AC × 22
AC × 24
AC × 22
AC × 130
Set Name Test Cases
Sample example0.txt, example1.txt, example2.txt, example3.txt, example4.txt
Subtask1 subtask1_0.txt, subtask1_1.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_2.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_24.txt, subtask1_25.txt, subtask1_3.txt, subtask1_4.txt, subtask1_5.txt, subtask1_6.txt, subtask1_7.txt, subtask1_8.txt, subtask1_9.txt
Subtask2 subtask2_0.txt, subtask2_1.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, subtask2_15.txt, subtask2_16.txt, subtask2_17.txt, subtask2_18.txt, subtask2_19.txt, subtask2_2.txt, subtask2_20.txt, subtask2_3.txt, subtask2_4.txt, subtask2_5.txt, subtask2_6.txt, subtask2_7.txt, subtask2_8.txt, subtask2_9.txt, example1.txt
Subtask3 subtask3_0.txt, subtask3_1.txt, subtask3_10.txt, subtask3_11.txt, subtask3_12.txt, subtask3_13.txt, subtask3_14.txt, subtask3_15.txt, subtask3_16.txt, subtask3_17.txt, subtask3_18.txt, subtask3_19.txt, subtask3_2.txt, subtask3_20.txt, subtask3_21.txt, subtask3_22.txt, subtask3_3.txt, subtask3_4.txt, subtask3_5.txt, subtask3_6.txt, subtask3_7.txt, subtask3_8.txt, subtask3_9.txt, example2.txt
Subtask4 subtask4_0.txt, subtask4_1.txt, subtask4_10.txt, subtask4_11.txt, subtask4_12.txt, subtask4_13.txt, subtask4_14.txt, subtask4_15.txt, subtask4_16.txt, subtask4_17.txt, subtask4_18.txt, subtask4_19.txt, subtask4_2.txt, subtask4_20.txt, subtask4_3.txt, subtask4_4.txt, subtask4_5.txt, subtask4_6.txt, subtask4_7.txt, subtask4_8.txt, subtask4_9.txt, example3.txt
Subtask5 example0.txt, example1.txt, example2.txt, example3.txt, example4.txt, minimum0.txt, minimum1.txt, minimum2.txt, subtask1_0.txt, subtask1_1.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_2.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_24.txt, subtask1_25.txt, subtask1_3.txt, subtask1_4.txt, subtask1_5.txt, subtask1_6.txt, subtask1_7.txt, subtask1_8.txt, subtask1_9.txt, subtask2_0.txt, subtask2_1.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, subtask2_15.txt, subtask2_16.txt, subtask2_17.txt, subtask2_18.txt, subtask2_19.txt, subtask2_2.txt, subtask2_20.txt, subtask2_3.txt, subtask2_4.txt, subtask2_5.txt, subtask2_6.txt, subtask2_7.txt, subtask2_8.txt, subtask2_9.txt, subtask3_0.txt, subtask3_1.txt, subtask3_10.txt, subtask3_11.txt, subtask3_12.txt, subtask3_13.txt, subtask3_14.txt, subtask3_15.txt, subtask3_16.txt, subtask3_17.txt, subtask3_18.txt, subtask3_19.txt, subtask3_2.txt, subtask3_20.txt, subtask3_21.txt, subtask3_22.txt, subtask3_3.txt, subtask3_4.txt, subtask3_5.txt, subtask3_6.txt, subtask3_7.txt, subtask3_8.txt, subtask3_9.txt, subtask4_0.txt, subtask4_1.txt, subtask4_10.txt, subtask4_11.txt, subtask4_12.txt, subtask4_13.txt, subtask4_14.txt, subtask4_15.txt, subtask4_16.txt, subtask4_17.txt, subtask4_18.txt, subtask4_19.txt, subtask4_2.txt, subtask4_20.txt, subtask4_3.txt, subtask4_4.txt, subtask4_5.txt, subtask4_6.txt, subtask4_7.txt, subtask4_8.txt, subtask4_9.txt, subtask5_0.txt, subtask5_1.txt, subtask5_10.txt, subtask5_11.txt, subtask5_12.txt, subtask5_13.txt, subtask5_14.txt, subtask5_15.txt, subtask5_16.txt, subtask5_17.txt, subtask5_18.txt, subtask5_19.txt, subtask5_2.txt, subtask5_20.txt, subtask5_21.txt, subtask5_22.txt, subtask5_23.txt, subtask5_24.txt, subtask5_25.txt, subtask5_26.txt, subtask5_27.txt, subtask5_28.txt, subtask5_29.txt, subtask5_3.txt, subtask5_30.txt, subtask5_4.txt, subtask5_5.txt, subtask5_6.txt, subtask5_7.txt, subtask5_8.txt, subtask5_9.txt
Case Name Status Exec Time Memory
example0.txt AC 16 ms 6132 KiB
example1.txt AC 6 ms 6032 KiB
example2.txt AC 10 ms 6104 KiB
example3.txt AC 7 ms 6208 KiB
example4.txt AC 7 ms 6032 KiB
minimum0.txt AC 7 ms 6192 KiB
minimum1.txt AC 6 ms 6192 KiB
minimum2.txt AC 10 ms 6080 KiB
subtask1_0.txt AC 28 ms 6580 KiB
subtask1_1.txt AC 16 ms 6488 KiB
subtask1_10.txt AC 10 ms 6156 KiB
subtask1_11.txt AC 20 ms 6520 KiB
subtask1_12.txt AC 17 ms 6500 KiB
subtask1_13.txt AC 23 ms 6716 KiB
subtask1_14.txt AC 24 ms 6600 KiB
subtask1_15.txt AC 27 ms 6864 KiB
subtask1_16.txt AC 23 ms 6972 KiB
subtask1_17.txt AC 22 ms 6924 KiB
subtask1_18.txt AC 21 ms 6992 KiB
subtask1_19.txt AC 27 ms 6940 KiB
subtask1_2.txt AC 14 ms 6296 KiB
subtask1_20.txt AC 22 ms 6900 KiB
subtask1_21.txt AC 20 ms 6868 KiB
subtask1_22.txt AC 21 ms 6944 KiB
subtask1_23.txt AC 24 ms 6868 KiB
subtask1_24.txt AC 24 ms 6880 KiB
subtask1_25.txt AC 28 ms 6856 KiB
subtask1_3.txt AC 21 ms 6524 KiB
subtask1_4.txt AC 20 ms 6692 KiB
subtask1_5.txt AC 24 ms 6768 KiB
subtask1_6.txt AC 12 ms 6184 KiB
subtask1_7.txt AC 10 ms 6248 KiB
subtask1_8.txt AC 23 ms 6708 KiB
subtask1_9.txt AC 24 ms 6504 KiB
subtask2_0.txt AC 1595 ms 6136 KiB
subtask2_1.txt AC 1003 ms 6500 KiB
subtask2_10.txt AC 3495 ms 6944 KiB
subtask2_11.txt AC 3465 ms 6924 KiB
subtask2_12.txt AC 3143 ms 6856 KiB
subtask2_13.txt AC 3343 ms 6936 KiB
subtask2_14.txt AC 2761 ms 6984 KiB
subtask2_15.txt AC 2477 ms 6940 KiB
subtask2_16.txt AC 3549 ms 6888 KiB
subtask2_17.txt AC 3411 ms 6868 KiB
subtask2_18.txt AC 3530 ms 6944 KiB
subtask2_19.txt AC 3486 ms 6864 KiB
subtask2_2.txt AC 2209 ms 6284 KiB
subtask2_20.txt AC 2725 ms 6928 KiB
subtask2_3.txt AC 2497 ms 6980 KiB
subtask2_4.txt AC 3003 ms 6952 KiB
subtask2_5.txt AC 3321 ms 6940 KiB
subtask2_6.txt AC 2634 ms 6936 KiB
subtask2_7.txt AC 3436 ms 6872 KiB
subtask2_8.txt AC 4016 ms 6872 KiB
subtask2_9.txt AC 3765 ms 6928 KiB
subtask3_0.txt AC 233 ms 6696 KiB
subtask3_1.txt AC 1558 ms 6520 KiB
subtask3_10.txt AC 3221 ms 6888 KiB
subtask3_11.txt AC 4648 ms 6948 KiB
subtask3_12.txt AC 3132 ms 6812 KiB
subtask3_13.txt AC 3788 ms 6864 KiB
subtask3_14.txt AC 2787 ms 6868 KiB
subtask3_15.txt AC 2837 ms 6816 KiB
subtask3_16.txt AC 3221 ms 6948 KiB
subtask3_17.txt AC 2675 ms 6868 KiB
subtask3_18.txt AC 2858 ms 6980 KiB
subtask3_19.txt AC 3133 ms 6868 KiB
subtask3_2.txt AC 973 ms 6584 KiB
subtask3_20.txt AC 2760 ms 6948 KiB
subtask3_21.txt AC 2863 ms 6876 KiB
subtask3_22.txt AC 3369 ms 6924 KiB
subtask3_3.txt AC 3230 ms 6876 KiB
subtask3_4.txt AC 3294 ms 6980 KiB
subtask3_5.txt AC 2986 ms 6816 KiB
subtask3_6.txt AC 3173 ms 6936 KiB
subtask3_7.txt AC 2544 ms 6924 KiB
subtask3_8.txt AC 3066 ms 6980 KiB
subtask3_9.txt AC 2944 ms 6872 KiB
subtask4_0.txt AC 1399 ms 6500 KiB
subtask4_1.txt AC 1670 ms 6552 KiB
subtask4_10.txt AC 3984 ms 6980 KiB
subtask4_11.txt AC 4132 ms 6872 KiB
subtask4_12.txt AC 4151 ms 6872 KiB
subtask4_13.txt AC 4159 ms 6948 KiB
subtask4_14.txt AC 3518 ms 6928 KiB
subtask4_15.txt AC 3637 ms 6924 KiB
subtask4_16.txt AC 3752 ms 6872 KiB
subtask4_17.txt AC 3225 ms 6868 KiB
subtask4_18.txt AC 3333 ms 6928 KiB
subtask4_19.txt AC 3839 ms 6812 KiB
subtask4_2.txt AC 2660 ms 6632 KiB
subtask4_20.txt AC 3851 ms 6936 KiB
subtask4_3.txt AC 3497 ms 6872 KiB
subtask4_4.txt AC 3240 ms 6928 KiB
subtask4_5.txt AC 3650 ms 6988 KiB
subtask4_6.txt AC 3540 ms 6872 KiB
subtask4_7.txt AC 3563 ms 6936 KiB
subtask4_8.txt AC 4361 ms 6872 KiB
subtask4_9.txt AC 4383 ms 6928 KiB
subtask5_0.txt AC 1771 ms 6364 KiB
subtask5_1.txt AC 2095 ms 6672 KiB
subtask5_10.txt AC 3344 ms 6876 KiB
subtask5_11.txt AC 3537 ms 6888 KiB
subtask5_12.txt AC 3570 ms 6980 KiB
subtask5_13.txt AC 3448 ms 6868 KiB
subtask5_14.txt AC 3519 ms 6944 KiB
subtask5_15.txt AC 4376 ms 6924 KiB
subtask5_16.txt AC 4366 ms 6816 KiB
subtask5_17.txt AC 4107 ms 6868 KiB
subtask5_18.txt AC 4060 ms 6816 KiB
subtask5_19.txt AC 4175 ms 6812 KiB
subtask5_2.txt AC 1286 ms 6336 KiB
subtask5_20.txt AC 4154 ms 6992 KiB
subtask5_21.txt AC 3492 ms 6872 KiB
subtask5_22.txt AC 3412 ms 6876 KiB
subtask5_23.txt AC 3582 ms 6980 KiB
subtask5_24.txt AC 3605 ms 6928 KiB
subtask5_25.txt AC 3789 ms 6924 KiB
subtask5_26.txt AC 3533 ms 6872 KiB
subtask5_27.txt AC 3704 ms 6860 KiB
subtask5_28.txt AC 3661 ms 6924 KiB
subtask5_29.txt AC 3560 ms 6872 KiB
subtask5_3.txt AC 1115 ms 6168 KiB
subtask5_30.txt AC 3438 ms 6880 KiB
subtask5_4.txt AC 1414 ms 6920 KiB
subtask5_5.txt AC 3567 ms 6864 KiB
subtask5_6.txt AC 3528 ms 6812 KiB
subtask5_7.txt AC 3593 ms 6940 KiB
subtask5_8.txt AC 3574 ms 6944 KiB
subtask5_9.txt AC 3598 ms 6868 KiB