제출 #761708

#제출 시각아이디문제언어결과실행 시간메모리
761708vjudge1Meteors (POI11_met)C++17
24 / 100
101 ms65536 KiB
#include <bits/stdc++.h> #define ios ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define file(s) if (fopen(s".in", "r")) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout) #define all(a) a.begin() , a.end() #define F first #define S second #define int ll using namespace std; using ll = long long; const int N = 3e5+5 , M = 1e7+5, inf = 2e9 + 7; const ll INF = 1e18 , mod = 1e9+7 , P = 6547; int a[N] , b[N] , l[N] , r[N] , c[N] , root[N] , sz , R[M] , L[M]; vector<int> g[N]; ll laz[M]; void push(int v, int ul , int ur) { if(laz[v] == 0) return; int nvl = sz++; laz[nvl] = laz[v]+laz[L[v]]; L[nvl] = L[L[v]]; R[nvl] = R[L[v]]; L[v] = nvl; int nvr = sz++; laz[nvr] = laz[v]+laz[R[v]]; L[nvr] = L[R[v]]; R[nvr] = R[R[v]]; R[v] = nvr; laz[v] = 0; } int upd(int v, int tl, int tr, int l , int r , int val){ if(tl > r || tr < l) return v; if(l <= tl && tr <= r) { int nv = sz++; laz[nv] = laz[v] + val; L[nv] = L[v]; R[nv] = R[v]; return nv; } push(v,tl,tr); int nv = sz++; int tm = (tl + tr) >> 1; L[nv] = upd(L[v], tl, tm, l , r , val); R[nv] = upd(R[v], tm+1, tr, l , r , val); return nv; } int get(int v , int tl , int tr , int pos){ if(tl == tr) return laz[v]; int tm = (tl+tr) >> 1; push(v,tl,tr); if(tm >= pos){ return get(L[v],tl,tm,pos); } else { return get(R[v],tm+1,tr,pos); } } void solve(){ sz = 1; int n, m; cin >> n >> m; for(int i = 1; i <= m; i++) cin >> a[i] , g[a[i]].push_back(i); for(int i = 1; i <= n; i++) cin >> b[i]; int k; cin >> k; // root[0] = build(1,m); for(int i = 1; i <= k; i++) { cin >> l[i] >> r[i] >> c[i]; root[i] = root[i-1]; if(l[i] > r[i]){ root[i] = upd(root[i],1,m,l[i],m,c[i]); root[i] = upd(root[i],1,m,1,r[i],c[i]); } else { root[i] = upd(root[i],1,m,l[i],r[i],c[i]); } } for(int i = 1; i <= n; i++){ if(g[i].size() == 0){ cout << "NIE\n"; continue; } int res = 0; for(int l = 1 , r = k; l <= r;){ int md = (l+r) >> 1; ll sum = 0; for(int x : g[i]) { sum += get(root[md],1,m,x); } if(sum >= b[i]){ res = md; r = md-1; } else { l = md+1; } } if(res == 0){ cout << "NIE\n"; } else { cout << res << "\n"; } } } /* */ signed main(){ ios; solve(); 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...