提交时间:2024-11-07 18:37:20
运行 ID: 34404
#include <iostream> #include <vector> using namespace std; using i64 = long long; struct BIT { int n; vector<int> tree; BIT(int len) : n(len) , tree(len + 5) { } int query(int idx) { int res = 0; for (; idx > 0; idx -= idx & (-idx)) res += tree[idx]; return res; } void update(int l, int r, int val) { update(l, val); update(r + 1, -val); } void update(int idx, int val) { for (; idx <= n; idx += idx & (-idx)) tree[idx] += val; } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n; cin >> n; BIT cards(n); for (int i = 1; i <= n; ++i) { char card; cin >> card; cards.update(i, i, card - '0'); } vector<int> r(n), t(n); for (int& x : r) cin >> x; for (int& x : t) cin >> x; i64 ans = 0; for (int i = 1; i <= n; ++i) { if (cards.query(i) & 1) { cards.update(i, r[i - 1], 1); ans += t[i - 1]; } } cout << ans << '\n'; return 0; }