제출 #865731

#제출 시각아이디문제언어결과실행 시간메모리
865731vjudge1새로운 문제 (POI11_met)C++98
74 / 100
2830 ms65536 KiB
// Bolatulu #include <bits/stdc++.h> typedef long long ll; typedef unsigned long long ull; typedef double db; #define int long long #define kanagattandirilmagandiktarinizdan ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr); #define pb push_back #define F first #define S second #define md (tl+tr)/2 #define TL v+v,tl,md #define TR v+v+1,md+1,tr #pragma GCC target( "sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #pragma GCC optimize("Ofast,unroll-loops,fast-math,O3") using namespace std; int binpow(int a,int n,int M) { if (n==0) return 1; if (n%2!=0) return (a * binpow(a,n-1,M))%M; int z=binpow(a,n/2,M); return (z*z)%M; } const ll INF = 1e18; const int N = 35e4+7; const int M = 1e9+7; const ll HZ = 1e5; const int MAX = INT_MAX; const int MIN = INT_MIN; const db pi = 3.141592653; const int P=31; struct segment{int l;int r;}; int n,m,q,a[N],p[N],t[4*N]; segment seg[N]; vector <int> MID[N]; void push(int v) { t[v+v]+=t[v], t[v+v+1]+=t[v]; t[v]=0; } void upd(int l,int r,int val,int v=1,int tl=1,int tr=m) { if (tl>=l and tr<=r) { t[v]+=val; return; } if (tl>r or tr<l) return; push(v); upd(l,r,val,TL), upd(l,r,val,TR); } int get(int pos,int v=1,int tl=1,int tr=m) { if (tl==tr) return t[v]; push(v); if (pos<=md) return get(pos,TL); else return get(pos,TR); } int l[N],r[N],v[N]; vector <int> pos[N]; void solve() { cin >> n >> m; for (int i=1;i<=m;i++) cin >> a[i], pos[a[i]].push_back(i); for (int i=1;i<=n;i++) cin >> p[i]; cin >> q; for (int i=1;i<=q;i++) cin >> l[i] >> r[i] >> v[i]; for (int i=1;i<=n;i++) seg[i].l=-1,seg[i].r=q+1; bool ok=true; while (ok) { for (int i=0;i<=q;i++) MID[i].clear(); for (int i=0;i<=4*N-1;i++) t[i]=0; ok=false; for (int i=1;i<=n;i++) { // cout << seg[i].l << ' ' << seg[i].r << endl; if (seg[i].l+1<seg[i].r) { int mid = (seg[i].l + seg[i].r) / 2; MID[mid].push_back(i); ok=true; } } // cout << endl; for (int i=0;i<=q;i++) { if (i>0) { if (l[i] > r[i]) upd(l[i], m, v[i]), upd(1, r[i], v[i]); else upd(l[i], r[i], v[i]); } for (auto now : MID[i]) { int sum=0; for (auto now1 : pos[now]) sum+=get(now1); if (sum>=p[now]) seg[now].r=i; else seg[now].l=i; } } } for (int i=1;i<=n;i++) { if (seg[i].r==q+1) cout << "NIE\n"; else cout << seg[i].r << '\n'; } } signed main() { // freopen("lca.in", "r", stdin); // freopen("lca.out", "w", stdout); kanagattandirilmagandiktarinizdan int test = 1, count = 1; // cin >> test; while (test--) { // cout << "Case " << count << ":\n"; solve(); if (test) // cout << '\n'; count++; } 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...