제출 #1315365

#제출 시각아이디문제언어결과실행 시간메모리
1315365nambanana987새로운 문제 (POI11_met)C++20
74 / 100
2266 ms87640 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define f first #define s second #define sz(a) (int)a.size() struct SegmentTree { vector<long long> lazy; void init(int n) { lazy.assign(4*n, 0); } void update(int id, int l, int r, int u, int v, int val) { if(l>v || r<u) return; if(l>=u && r<=v) { lazy[id] += val; return; } int mid = l + r >> 1; update(id*2, l, mid, u, v, val); update(id*2+1, mid+1, r, u, v, val); } int get(int id, int l , int r, int p) { if(l==r) { return lazy[id]; } int mid = l + r >> 1; if(mid>=p) return get(id*2, l, mid, p) + lazy[id]; return get(id*2+1, mid+1, r, p) + lazy[id]; } }; struct event{ int l, r, v; }; void solve() { int n, m; cin >> n >> m; vector<int> have[n+5]; int a[n+5]; for(int i=1; i<=m; i++) { int c; cin >> c; have[c].push_back(i); } for(int i=1; i<=n; i++) cin >> a[i]; int k; cin >> k; vector<event> query(k+5); for(int i=1; i<=k; i++) cin >> query[i].l >> query[i].r >> query[i].v; vector<int> l(n+5, 1); vector<int> r(n+5, k+1); bool flag = true; vector<int> can[k+5]; SegmentTree tree; tree.init(m+5); while(flag) { flag = false; for(int i=1; i<=n; i++) { if(l[i]>=r[i]) continue; flag = true; int mid= l[i] + r[i] >> 1; can[mid].push_back(i); } if(!flag) break; for(int i=1; i<=k; i++) { if(query[i].l > query[i].r) { tree.update(1, 1, m, query[i].l, m, query[i].v); tree.update(1, 1, m, 1, query[i].r, query[i].v); } else tree.update(1, 1, m, query[i].l, query[i].r, query[i].v); for(int p: can[i]) { long long res = 0; for(int c: have[p]) { res += tree.get(1, 1, m, c); if(res >= a[p]) break; } if(res >= a[p]) r[p] = i; else l[p] = i+1; } can[i].clear(); } tree.init(m+5); } for(int i=1; i<=n; i++) { if(l[i]==k+1) cout<<"NIE\n"; else cout<<l[i]<<'\n'; } } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0); solve(); }
#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...