Submission #63601937


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define all(a) begin(a), end(a)
#define rall(a) rbegin(a), rend(a)
#define len(a) (int)((a).size())

#define int ll

int n;
vector<ll> a, b, c;

struct segtree {
    vector<ll> seg;
    int n;

    segtree(int n) : n(n) {
        seg.resize(n * 4);
    }

    void upd(int v, int l, int r, int pos, int val) {
        if (l == r - 1) {
            seg[v] += val;
        } else {
            int mid = (l + r) / 2;
            if (pos < mid) {
                upd(v * 2 + 1, l, mid, pos, val);
            } else {
                upd(v * 2 + 2, mid, r, pos, val);
            }
            seg[v] = seg[v * 2 + 1] + seg[v * 2 + 2];
        }
    }

    ll ask(int v, int l, int r, int askl, int askr) {
        if (l >= askr || askl >= r) return 0;
        if (askl <= l && r <= askr) return seg[v];
        int mid = (l + r) / 2;
        return ask(v * 2 + 1, l, mid, askl, askr) + ask(v * 2 + 2, mid, r, askl, askr);
    }
    void upd(int pos, int val) {
        upd(0, 0, n, pos, val);
    }
    ll ask(int askl, int askr) {
        return ask(0, 0, n, askl, askr);
    }
};

const ll SZ = 1'000'100;

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n;
    a.resize(n);
    b.resize(n);
    c.resize(n);
    for (auto &t : a) cin >> t;
    for (auto &t : b) cin >> t;
    for (auto &t : c) cin >> t;

    ll cur_cost = 0, ops = 0;
    segtree seg(SZ), segcnt(SZ), seg2(SZ), segcnt2(SZ);
    for (int i = 0; i < n; ++i) {
        if (a[i] == 1 && b[i] == 0) {
            cur_cost += seg.ask(0, c[i]);
            cur_cost += c[i] * (segcnt.ask(c[i], SZ));
            segcnt.upd(c[i], 1);
            seg.upd(c[i], c[i]);
            ++ops;
        } else if (a[i] == 0 && b[i] == 0) {
            continue;
        } else if (a[i] == 0 && b[i] == 1) {
            cur_cost += seg2.ask(0, c[i]);
            cur_cost += c[i] * (segcnt2.ask(c[i], SZ) + 1);
            segcnt2.upd(c[i], 1);
            seg2.upd(c[i], c[i]);
            ++ops;
        }
    }

    vector<pair<ll, ll>> vals;
    ll left_sum = 0;
    for (int i = 0; i < n; ++i) {
        if (a[i] == 1 && b[i] == 1) {
            vals.push_back({c[i], i});
            left_sum += c[i];
        }
    }
    sort(rall(vals));
    ll ans = cur_cost + left_sum * ops;
    for (auto cc : vals) {
        int i = cc.second;
        cur_cost += seg.ask(0, c[i]);
        cur_cost += c[i] * (segcnt.ask(c[i], SZ));
        segcnt.upd(c[i], 1);
        seg.upd(c[i], c[i]);
        left_sum -= cc.first;
        cur_cost += seg2.ask(0, c[i]);
        cur_cost += c[i] * (segcnt2.ask(c[i], SZ) + 1);
        segcnt2.upd(c[i], 1);
        seg2.upd(c[i], c[i]);
        ops += 2;
        ans = min(ans, cur_cost + left_sum * ops);
    }

    cout << ans << "\n";

    return 0;
} 

Submission Info

Submission Time
Task C - Cost to Flip
User Tea_Time
Language C++ 20 (gcc 12.2)
Score 600
Code Size 2957 Byte
Status AC
Exec Time 241 ms
Memory 136996 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 46
Set Name Test Cases
Sample example0.txt, example1.txt, example2.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, example0.txt, example1.txt, example2.txt
Case Name Status Exec Time Memory
000.txt AC 50 ms 128204 KiB
001.txt AC 50 ms 128144 KiB
002.txt AC 50 ms 128156 KiB
003.txt AC 49 ms 128284 KiB
004.txt AC 241 ms 132708 KiB
005.txt AC 70 ms 132620 KiB
006.txt AC 218 ms 132632 KiB
007.txt AC 224 ms 132548 KiB
008.txt AC 221 ms 136996 KiB
009.txt AC 71 ms 132684 KiB
010.txt AC 109 ms 132620 KiB
011.txt AC 129 ms 134996 KiB
012.txt AC 128 ms 134888 KiB
013.txt AC 95 ms 129812 KiB
014.txt AC 91 ms 129528 KiB
015.txt AC 128 ms 130804 KiB
016.txt AC 110 ms 130300 KiB
017.txt AC 64 ms 128396 KiB
018.txt AC 109 ms 130420 KiB
019.txt AC 132 ms 131100 KiB
020.txt AC 202 ms 133644 KiB
021.txt AC 99 ms 129784 KiB
022.txt AC 76 ms 129068 KiB
023.txt AC 210 ms 133828 KiB
024.txt AC 208 ms 133788 KiB
025.txt AC 213 ms 133808 KiB
026.txt AC 209 ms 133776 KiB
027.txt AC 200 ms 133832 KiB
028.txt AC 207 ms 133844 KiB
029.txt AC 207 ms 133876 KiB
030.txt AC 207 ms 133804 KiB
031.txt AC 205 ms 133840 KiB
032.txt AC 210 ms 133776 KiB
033.txt AC 209 ms 133700 KiB
034.txt AC 213 ms 133828 KiB
035.txt AC 205 ms 133704 KiB
036.txt AC 206 ms 133948 KiB
037.txt AC 208 ms 133772 KiB
038.txt AC 210 ms 133844 KiB
039.txt AC 208 ms 133800 KiB
040.txt AC 207 ms 133844 KiB
041.txt AC 204 ms 133832 KiB
042.txt AC 212 ms 133872 KiB
example0.txt AC 50 ms 128132 KiB
example1.txt AC 49 ms 128292 KiB
example2.txt AC 49 ms 128144 KiB