Submission #443084

#TimeUsernameProblemLanguageResultExecution timeMemory
443084MladenPMeteors (POI11_met)C++17
100 / 100
2059 ms65536 KiB
#include <bits/stdc++.h> #define MAXN 300010 #define lld long long #define endl '\n' #define PRINT(x) cerr<<flush<<#x<<'='<<x<<endl; using namespace std; int N, M, K, l[MAXN], r[MAXN], L[MAXN], R[MAXN], rez[MAXN]; lld bit[MAXN], p[MAXN], x[MAXN]; vector<int> sec[MAXN], q[MAXN]; void update(int idx, lld val) { while(idx < MAXN) { bit[idx] += val; idx += idx&-idx; } } lld query(int idx) { lld sum = 0; while(idx) { sum += bit[idx]; idx -= idx&-idx; } return sum; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N >> M; for(int i = 1; i <= M; i++) { int o; cin >> o; sec[o].push_back(i); } for(int i = 1; i <= N; i++) cin >> p[i]; cin >> K; for(int i = 1; i <= K; i++) { cin >> l[i] >> r[i] >> x[i]; } for(int i = 1; i <= N; i++) { L[i] = 1, R[i] = K, rez[i] = K+1; } bool changed = 1; while(changed) { changed = 0; fill(bit, bit+MAXN, 0LL); for(int i = 1; i <= K; i++) q[i].clear(); for(int i = 1; i <= N; i++) { if(L[i] <= R[i]) { changed = 1; int mid = (L[i]+R[i])/2; q[mid].push_back(i); } } for(int i = 1; i <= K; i++) { if(l[i] <= r[i]) { update(l[i], x[i]); update(r[i]+1, -x[i]); } else { update(1, x[i]); update(r[i]+1, -x[i]); update(l[i], x[i]); } for(auto x : q[i]) { lld sum = 0; for(int s : sec[x]) { sum += query(s); if(sum >= p[x]) break; } if(sum >= p[x]) { R[x] = i-1; rez[x] = i; } else { L[x] = i+1; } } } } for(int i = 1; i <= N; i++) { if(rez[i] == K+1) cout << "NIE" << endl; else cout << rez[i] << endl; } return 0; }
#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...