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 |
|
|
| 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 |