Submission #389667

#TimeUsernameProblemLanguageResultExecution timeMemory
389667qwerasdfzxclMeteors (POI11_met)C++14
74 / 100
6082 ms48856 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; struct Seg{ ll a[300300], lazy[(1<<20)+1]; void init(int i, int l, int r){ lazy[i] = 0; if (l==r){ a[l] = 0; return; } int m = (l+r)>>1; init(i<<1, l, m); init(i<<1|1, m+1, r); } void propagate(int i, int l, int r){ if (l==r) a[l] += lazy[i]; else lazy[i<<1] += lazy[i], lazy[i<<1|1] += lazy[i]; lazy[i] = 0; } void update(int i, int l, int r, int s, int e, int val){ propagate(i, l, r); if (r<s || e<l) return; if (s<=l && r<=e){ lazy[i] += val; propagate(i, l, r); return; } int m = (l+r)>>1; update(i<<1, l, m, s, e, val); update(i<<1|1, m+1, r, s, e, val); } ll query(int i, int l, int r, int p){ propagate(i, l, r); if (r<p || p<l) return 0; if (p==l && p==r) return a[l]; int m = (l+r)>>1; return query(i<<1, l, m, p)+query(i<<1|1, m+1, r, p); } }tree; struct Query{ int l, r, a; }query[300300]; vector<int> ar[300300], q[300300]; int l[300300], r[300300], ans[300300]; ll val[300300]; int main(){ int n, m; scanf("%d %d", &n, &m); for (int i=1;i<=m;i++){ int x; scanf("%d", &x); ar[x-1].push_back(i); } for (int i=0;i<n;i++) scanf("%lld", val+i); int tmp; scanf("%d", &tmp); for (int i=0;i<tmp;i++){ scanf("%d %d %d", &query[i].l, &query[i].r, &query[i].a); } for (int i=0;i<n;i++) l[i] = 0, r[i] = tmp; while(1){ bool chk=0; for (int i=0;i<=tmp;i++) q[i].clear(); for (int i=0;i<n;i++) if (l[i]!=r[i]){ q[(l[i]+r[i])>>1].push_back(i); chk=1; } if (!chk) break; tree.init(1, 1, m); for (int i=0;i<tmp;i++){ if (query[i].l<=query[i].r) tree.update(1, 1, m, query[i].l, query[i].r, query[i].a); else{ tree.update(1, 1, m, 1, query[i].r, query[i].a); tree.update(1, 1, m, query[i].l, m, query[i].a); } for (auto &j:q[i]){ ll tmp1 = 0; for (auto &x:ar[j]) tmp1 += tree.query(1, 1, m, x); if (tmp1>=val[j]){ r[j] = i; ans[j] = i+1; } else l[j] = i+1; } } } for (int i=0;i<n;i++){ if (l[i] == tmp) printf("NIE\n"); else printf("%d\n", ans[i]); } return 0; }

Compilation message (stderr)

met.cpp: In function 'int main()':
met.cpp:47:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   47 |     scanf("%d %d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~~
met.cpp:50:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   50 |         scanf("%d", &x);
      |         ~~~~~^~~~~~~~~~
met.cpp:53:32: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   53 |     for (int i=0;i<n;i++) scanf("%lld", val+i);
      |                           ~~~~~^~~~~~~~~~~~~~~
met.cpp:55:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   55 |     scanf("%d", &tmp);
      |     ~~~~~^~~~~~~~~~~~
met.cpp:57:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   57 |         scanf("%d %d %d", &query[i].l, &query[i].r, &query[i].a);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...