제출 #761642

#제출 시각아이디문제언어결과실행 시간메모리
761642vjudge1Meteors (POI11_met)C++17
24 / 100
102 ms65536 KiB
#include <algorithm> #include <iostream> #include <iomanip> #include <bitset> #include <cmath> #include <queue> #include <map> #include <set> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define ent "\n" const int maxn = 3e5 + 100; const ll INF = (ll)2e18; const int inf = (ll)2e9; const int maxl = 26; const int MOD = 1e9 + 7; ll n, m, q, sz; vector<ll> g[maxn]; ll a[maxn]; ll d[maxn * 60]; ll L[maxn * 60]; ll R[maxn * 60]; ll root[maxn]; ll copy(ll v){ ll nv = ++sz; d[nv] = d[v]; L[nv] = L[v]; R[nv] = R[v]; return nv; } ll build(ll tl = 1, ll tr = m){ ll v = ++sz; if(tl < tr){ ll mid = (tl + tr) >> 1; L[v] = build(tl, mid); R[v] = build(mid + 1, tr); } return v; } ll upd(ll l, ll r, ll x, ll v, ll tl = 1, ll tr = m){ ll nv = copy(v); if(tl > r || tr < l) return nv; if(l <= tl && tr <= r) d[nv] += x; else{ ll mid = (tl + tr) >> 1; L[nv] = upd(l, r, x, L[nv], tl, mid); R[nv] = upd(l, r, x, R[nv], mid+1, tr); } return nv; } ll upd1(ll l, ll r, ll x, ll v, ll tl = 1, ll tr = m){ ll nv = copy(v); if(r < tl && tr < l) return nv; if(l <= tl || tr <= r) d[nv] += x; else{ ll mid = (tl + tr) >> 1; L[nv] = upd1(l, r, x, L[nv], tl, mid); R[nv] = upd1(l, r, x, R[nv], mid+1, tr); } return nv; } ll get(ll i, ll v, ll tl = 1, ll tr = m){ if(tl == tr) return d[v]; ll mid = (tl + tr) >> 1; if(i <= mid) return get(i, L[v], tl, mid) + d[v]; else return get(i, R[v], mid + 1, tr) + d[v]; } void test(){ cin >> n >> m; root[0] = build(); for(ll i = 1; i <= m; i++){ ll x; cin >> x; g[x].push_back(i); } for(ll i = 1; i <= n; i++){ cin >> a[i]; } cin >> q; for(ll i = 1; i <= q; i++){ ll l, r, x; cin >> l >> r >> x; if(l <= r) root[i] = upd(l, r, x, root[i-1]); else root[i] = upd1(l, r, x, root[i-1]); } for(ll i = 1; i <= n; i++){ ll ans = -1; for(ll l = 0, r = q; l <= r;){ ll mid = (l + r) >> 1; ll sum = 0; for(ll x: g[i]){ sum += get(x, root[mid]); } if(sum < a[i]) l = mid + 1; else r = mid - 1, ans = mid; } if(ans == -1) cout << "NIE\n"; else cout << ans << ent; } } int main(){ // freopen("cows.in", "r", stdin); // freopen("cows.out", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); int t; t = 1; while(t--) test(); }
#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...