#pragma GCC optimize("Ofast") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx") #include using std::cerr; using std::cin; using std::cout; using std::abs; using std::min; using std::max; using std::swap; using std::map; using std::pair; using std::set; using std::string; using std::vector; using ll = long long; using uint = unsigned int; using pii = pair; using pll = pair; #define ff first #define ss second #define pb emplace_back template void _dbg(const char* _s, T _h) { cerr << _s << " = " << _h <<"\n"; } template void _dbg(const char* _s, T _h, Ts... _t) { int _b = 0; while (((_b += *_s == '(') -= *_s == ')') != 0 || *_s != ',') cerr << *_s++; cerr << " = " << _h << ","; _dbg(_s+1, _t...); } #ifdef LOCAL #define dbg(...) _dbg(#__VA_ARGS__, __VA_ARGS__) #else #define dbg(...) #endif struct init { init() { cin.tie(0); std::iostream::sync_with_stdio(0); cout << std::fixed << std::setprecision(10); cerr << std::fixed << std::setprecision(5); #ifdef LOCAL srand(300); #else using namespace std::chrono; srand(duration_cast(high_resolution_clock::now().time_since_epoch()).count()); #endif } ~init() { #ifdef LOCAL cerr << "Time elapsed: " << (double)clock() / CLOCKS_PER_SEC << "s.\n"; #endif } } init; const int MAXN = 2e5 + 15; ll a[MAXN]; struct ev{ int x, t, w; } evs[MAXN * 3]; ll cnt[MAXN]; ll x[MAXN], y[MAXN], r[MAXN]; int main() { int n = rand() % 5 + 1, s = 0, m = rand() % 5 + 1; dbg(n, m); cin >> n; for (int i = 0; i < n; ++i) { a[i] = rand() % 10 + 1; dbg(a[i]); cin >> a[i]; } for (int i = 0; i < n; ++i) { x[i] = rand() % 10 + 1; dbg(x[i]); cin >> x[i]; evs[s++] = {x[i], 0, i}; } cin >> m; for (int i = 0; i < m; ++i) { y[i] = rand() % 10 + 1; r[i] = rand() % 10 + 1; dbg(y[i], r[i]); cin >> y[i]; } for (int i = 0; i < m; ++i) { cin >> r[i]; evs[s++] = {y[i] - r[i], -1, i}; evs[s++] = {y[i] + r[i], +1, i}; } std::sort(evs, evs + s, [](const ev & p1, const ev & p2) { return p1.x == p2.x ? p1.t < p2.t : p1.x < p2.x; }); ll sunny = 0; set clo; memset(cnt, 0, sizeof cnt); for (int i = 0; i < s; ++i) { dbg(sunny, clo.size()); dbg(evs[i].x, evs[i].t, evs[i].w); if (!evs[i].t) { if (clo.empty()) sunny += a[evs[i].w]; if (clo.size() == 1) { cnt[*clo.begin()] += a[evs[i].w]; } } else if (evs[i].t == -1) { clo.insert(evs[i].w); } else { clo.erase(evs[i].w); } } sunny += *std::max_element(cnt, cnt + m); cout << sunny << '\n'; return 0; }