Submission #1169837

#TimeUsernameProblemLanguageResultExecution timeMemory
1169837Vladth11Meteors (POI11_met)C++20
74 / 100
1468 ms71564 KiB
#include<bits/stdc++.h> #define debug(x) cerr << #x << " " << x << "\n" #define debugs(x) cerr << #x << " " << x << " " #pragma GCC optimize("Ofast") //#define int long long using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int range_rng(int l, int r) { return uniform_int_distribution<int>(l,r)(rng); } struct info { int l; int r; }; info interval[700005]; vector<int> poz[300005]; vector<int> queries[700005]; vector<int> curr; vector<int> nxt; int req[300005]; int ans[300005]; int l[300005]; int r[300005]; int a[300005]; int m; class AIB { public: int aib[300005]; void clr() { int i; for (i=1; i<=m; i++) { aib[i]=0; } } void update(int idx, int delta) { while (idx<=m) { if (aib[idx]+delta<=1e9+5) aib[idx]+=delta; else aib[idx]=1e9+1; idx+=idx&(-idx); } } void update(int l, int r, int x) { if (l>r) { update(l,m,x); update(1,r,x); } else { update(l,x); update(r+1,-x); } } int query(int idx) { int ans; ans=0; while (idx>0) { if (ans+aib[idx]<=1e9+5) ans+=aib[idx]; else ans=1e9+1; idx-=idx&(-idx); } return ans; } } aib; signed main() { //ifstream fin("sirbun.in"); //ofstream fout("sirbun.out"); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,k,i,j,cnt,lson,rson,pas; int score; cin >> n >> m; for (i=1; i<=m; i++) { cin >> j; poz[j].push_back(i); } cnt=1; for (i=1; i<=n; i++) { cin >> req[i]; queries[cnt].push_back(i); } cin >> k; interval[cnt].l=1; interval[cnt].r=k; curr.push_back(cnt); for (i=1; i<=k; i++) { cin >> l[i] >> r[i] >> a[i]; } for (pas=20; pas>=0; pas--) { aib.clr(); for (auto x : curr) { if (interval[x].l!=interval[x].r) { int mid; mid=(interval[x].l+interval[x].r)/2; cnt++; lson=cnt; interval[cnt].l=interval[x].l; interval[cnt].r=mid; nxt.push_back(cnt); cnt++; rson=cnt; interval[cnt].l=mid+1; interval[cnt].r=interval[x].r; nxt.push_back(cnt); for (i=interval[x].l; i<=mid; i++) aib.update(l[i],r[i],a[i]); for (auto y : queries[x]) { score=0; for (auto z : poz[y]) { if (score+aib.query(z)<=1e9+5) score+=aib.query(z); else score=1e9+1; } if (score>=req[y]) queries[lson].push_back(y); else queries[rson].push_back(y); } for (i=mid+1; i<=interval[x].r; i++) aib.update(l[i],r[i],a[i]); } else { for (i=interval[x].l; i<=interval[x].l; i++) aib.update(l[i],r[i],a[i]); for (auto y : queries[x]) { score=0; for (auto z : poz[y]) { if (score+aib.query(z)<=1e9+5) score+=aib.query(z); else score=1e9+1; } if (score>=req[y]) ans[y]=interval[x].l; else ans[y]=-1; } nxt.push_back(x); queries[x].clear(); } } curr.clear(); swap(nxt,curr); } for (i=1; i<=n; i++) { if (ans[i]!=-1) cout << ans[i] << "\n"; else cout << "NIE\n"; } 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...