Submission #1015734

#TimeUsernameProblemLanguageResultExecution timeMemory
1015734vjudge1Meteors (POI11_met)C++17
74 / 100
1446 ms65536 KiB
// // main1.cpp // problem1 // // Created by Essa Almousa on 2030 / 01/ 01 AD. // #include <bits/stdc++.h> using namespace std; #define endl '\n' using ll = int; using ll1 = int; #define pb push_back #define pF first #define pS second #define SP <<" "<< const ll N = 3e5+10; struct segment { vector<ll> tree; ll offset = 1; void it(ll n) { while (offset < n) offset *= 2; tree.resize(offset*2, 0); } void upd(ll v, ll l, ll r, ll ql, ll qr, ll x) { if (l >= qr || r <= ql) return; if (l >= ql && r <= qr) {tree[v] = min(tree[v] + x, (int)1e9); return;} ll mi = (l+r)/2; upd(v*2, l, mi, ql, qr, x); upd(v*2+1, mi, r, ql, qr, x); } ll query(ll i) { i--; i += offset; ll ans = 0; while (i >= 1) { ans = min(ans + tree[i], (int)1e9); i /= 2; } return ans; } void upd(ll l, ll r, ll val) {return upd(1, 0, offset, l-1, r, val);} }; struct query_ { ll l, r, x; }; ll a[N], b[N]; ll1 sol[N]; vector<ll> frq[N]; query_ q[N]; int main() { //ios::sync_with_stdio(0); cout.tie(0); cin.tie(0); ll1 n, m; cin>>n>>m; for (ll i=1; i<=m; i++) { int temp; cin >> temp; a[i] = temp; //cin>>a[i]; frq[a[i]].pb(i); } for (ll i=1; i<=n; i++) { int temp; cin >> temp; b[i] = temp; //cin>>b[i]; } ll1 q1; cin>>q1; struct binnode { ll i, m, l, r; }; vector<binnode> bin[N]; for (ll i=1; i<=n; i++) { ll mi = q1+1/2; bin[mi].pb({i, mi, 1, q1}); sol[i] = -1; } for (ll i=1; i<=q1; i++) { ll1 l, r, x; cin>>l>>r>>x; q[i] = {l, r, x}; } ll1 cnt = n; while (cnt > 0) { segment tree; tree.it(m); for (ll i=1; i<=q1; i++) { if (q[i].l > q[i].r) { tree.upd(q[i].l, m, q[i].x); tree.upd(1, q[i].r, q[i].x); } else tree.upd(q[i].l, q[i].r, q[i].x); for (ll1 j = bin[i].size()-1; j >= 0; j = bin[i].size()-1) { binnode& x = bin[i][j]; ll ans = 0; // the num for (ll k=0; k < frq[x.i].size(); k++) ans = min(ans + tree.query(frq[x.i][k]), (int)1e9); if (ans >= b[x.i]) x.r = x.m; else { if (x.l >= q1) {cnt--;bin[i].pop_back(); continue;}; x.l = x.m+1; } ll mid = (x.l+x.r)/2; if (x.l != x.r) {bin[mid].pb({x.i, mid, x.l, x.r}); cnt++;} else sol[x.i] = x.l; bin[i].pop_back(); cnt--; j = bin[i].size() - 1; } } } for (ll i=1; i<=n; i++) { if (sol[i] == -1) cout << "NIE" << endl; else cout << sol[i] << endl; } }

Compilation message (stderr)

met.cpp: In function 'int main()':
met.cpp:103:32: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |                 for (ll k=0; k < frq[x.i].size(); k++) ans = min(ans + tree.query(frq[x.i][k]), (int)1e9);
      |                              ~~^~~~~~~~~~~~~~~~~
#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...