提交时间:2024-11-07 18:49:20
运行 ID: 34416
#include <bits/stdc++.h> using namespace std; int n, a[1000005], b[1000005]; char s[1000005]; // bool tg[1000005]; // inline void pd(int x) // { // } // inline void upd(int x, int l, int r, int ql, int qr) // { // if (ql <= l && r <= qr) // { // tg[x] = 1; // return ; // } // } priority_queue <int, vector <int>, greater <> > pq; signed main() { freopen("poker.in", "r", stdin); freopen("poker.out", "w", stdout); scanf("%d %s", &n, s + 1); for (int i = 1; i <= n; i++) { s[i] -= '0'; scanf("%d", &a[i]); } for (int i = 1; i <= n; i++) { scanf("%d", &b[i]); } long long ans = 0; for (int i = 1; i <= n; i++) { while (!pq.empty() && pq.top() < i) pq.pop(); if (pq.size() & 1) s[i] = 1 - s[i]; if (s[i] == 1) { pq.push(a[i]); ans += b[i]; s[i] = 0; } } printf("%lld", ans); return 0; }