Submission #496516

#TimeUsernameProblemLanguageResultExecution timeMemory
496516armashkaMeteors (POI11_met)C++17
0 / 100
136 ms18228 KiB
#include <bits/stdc++.h> //#pragma comment(linker, "/stack:200000000") //#pragma GCC optimize("Ofast") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #define fast ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr); #define all(v) v.begin(),v.end() #define pb push_back #define sz size() #define ft first #define sd second using namespace std; typedef long long ll; typedef pair<ll, ll> pll; typedef unsigned long long ull; const int N = 3e5 + 5; const ll M = 1e8; const ll inf = 1e9; const ll mod = 1e9; const double Pi = acos(-1); ll binpow(ll x, ll ti) { ll res = 1;while (ti){if(ti & 1)res *= x;x *= x;ti >>= 1; x %= mod; res %= mod;} return res;} ll binmul(ll x, ll ti) { ll res = 0;while (ti){if(ti & 1)res += x;x += x;ti >>= 1; x %= mod; res %= mod;} return res;} ll nok(ll a, ll b) { return (a*b)/__gcd(abs(a),abs(b)) * (a*b > 0 ? 1 : -1); } bool odd(ll n) { return (n % 2 == 1); } bool even(ll n) { return (n % 2 == 0); } int n, m, k; ll val[N], t[N * 4], fl[N * 4]; void push(int v, int tl, int tr) { t[v] += (tr - tl + 1) * fl[v]; if (tl < tr) { fl[v + v] += fl[v]; fl[v + v + 1] += fl[v]; } fl[v] = 0; } void clear(int v = 1, int tl = 1, int tr = m) { t[v] = fl[v] = 0; if (tl == tr) return; int tm = (tl + tr) / 2; clear(v + v, tl, tm); clear(v + v + 1, tm + 1, tr); } void upd(int l, int r, ll val, int v = 1, int tl = 1, int tr = m) { push(v, tl, tr); if (r < tl || tr < l) return; if (l <= tl && tr <= r) { fl[v] += val; push(v, tl, tr); return; } ll tm = (tl + tr) / 2; upd(l, r, val, v + v, tl, tm); upd(l, r, val, v + v + 1, tm + 1, tr); t[v] = t[v + v] + t[v + v + 1]; } ll get(ll pos, ll v = 1, ll tl = 1, ll tr = m) { push(v, tl, tr); if (tl == tr) return t[v]; ll tm = (tl + tr) / 2; if (pos <= tm) return get(pos, v + v, tl, tm); else return get(pos, v + v + 1, tm + 1, tr); } const void solve(/*Armashka*/) { cin >> n >> m; int cnt[n + 5], l[n + 5], r[n + 5], lo[n + 5], hi[n + 5]; ll val[n + 5]; vector <int> pos[n + 5]; for (int i = 1; i <= m; ++ i) { int x; cin >> x; pos[x].pb(i); } for (int i = 1; i <= n; ++ i) { cin >> cnt[i]; } cin >> k; for (int i = 1; i <= k; ++ i) cin >> l[i] >> r[i] >> val[i]; for (int i = 1; i <= n; ++ i) lo[i] = 1, hi[i] = k + 1; vector <ll> v[n + 5]; bool ok = 1; while (ok) { ok = 0; clear(); for (int i = 1; i <= n; ++ i) { if (lo[i] < hi[i]) { v[int((lo[i] + hi[i]) / 2)].pb(i); } } for (int i = 1; i <= k; ++ i) { if (l[i] > r[i]) { upd(1, r[i], val[i]); upd(l[i], m, val[i]); } else { upd(l[i], r[i], val[i]); } while (v[i].sz) { ok = 1; int cur = v[i].back(); v[i].pop_back(); ll sum = 0; for (auto x : pos[cur]) sum += get(x); if (sum >= cnt[cur]) hi[cur] = i; else lo[cur] = i + 1; } } } for (int i = 1; i <= n; ++ i) { if (lo[i] > k) cout << "NIE\n"; else cout << lo[i] << "\n"; } } signed main() { fast; //freopen("divide.in", "r", stdin); //freopen("divide.out", "w", stdout); int tt = 1; //cin >> tt; while (tt --) { solve(); } } /* 5 4 4 1 2 3 1 3 4 5 3 4 5 2 3 2 1 3 1 1 3 5 2 3 4 5 2 1 3 1 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...