Submission #993599

#TimeUsernameProblemLanguageResultExecution timeMemory
993599n3rm1nHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
920 ms115068 KiB
#include<bits/stdc++.h> #define endl '\n' #define ll long long using namespace std; const long long MAXN = 1e6+10; void speed() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); } long long n, m; long long a[MAXN]; long long l, r, k; long long inpair[MAXN]; long long pairw[MAXN]; void read_array() { cin >> n >> m; stack < long long > s; for (long long i = 1; i <= n; ++ i) { cin >> a[i]; while(!s.empty() && a[s.top()] <= a[i]) s.pop(); if(!s.empty()) { inpair[i] = s.top(); pairw[i] = a[i] + a[s.top()]; } s.push(i); } /**cout << "**" << endl; for (long long i = 1;i <= n; ++ i) cout << inpair[i] << " "; cout << endl; cout << "**" << endl; for (long long i = 1;i <= n; ++ i) cout << pairw[i] << " "; cout << endl;*/ } struct que { long long ql, qr, w, id; que(){}; que(long long _ql, long long _qr, long long _w, long long _id) { ql = _ql; qr = _qr; w = _w; id = _id; } }; vector < que > g; bool cmp(que q1, que q2) { if(q1.qr != q2.qr)return(q1.qr < q2.qr); return (q1.id < q2.id); } long long t[MAXN * 4]; long long ql, qr; long long query(long long i, long long l, long long r) { if(ql <= l && r <= qr)return t[i]; if(qr < l || ql > r)return 0; long long mid = (l + r)/2; return max(query(2*i, l, mid), query(2*i+1, mid+1, r)); } long long pos, val; void update(long long i, long long l, long long r) { if(l == r) { t[i] = max(t[i], val); return; } long long mid = (l + r)/2; if(pos <= mid)update(2*i, l, mid); else update(2*i+1, mid+1, r); t[i] = max(t[2*i], t[2*i+1]); } long long ans[MAXN]; void queries() { for (long long i = 1; i <= m; ++ i) { cin >> l >> r >> k; g.push_back(que(l, r, k, i)); } sort(g.begin(), g.end(), cmp); long long last = 0; long long qll, qrr, ww, idd; for (long long i = 0; i < g.size(); ++ i) { qll = g[i].ql; qrr = g[i].qr; ww = g[i].w; idd = g[i].id; // cout << qll << " " << qrr << " " << ww << " " << idd << endl; for (long long j = last+1; j <= qrr; ++ j) { if(!inpair[j])continue; pos = inpair[j]; val = pairw[j]; // cout << "in " << pos << " " << val << endl; update(1, 1, n); } ql = qll; qr = qrr-1; long long res = query(1, 1, n); // cout << "final res " << res << endl; if(res <= ww)ans[idd] = 1; last = qrr; } for (long long i =1; i <= m; ++ i) { cout << ans[i] << endl; } } int main() { speed(); read_array(); queries(); return 0; }

Compilation message (stderr)

sortbooks.cpp: In function 'void queries()':
sortbooks.cpp:96:29: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<que>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   96 |     for (long long i = 0; i < g.size(); ++ i)
      |                           ~~^~~~~~~~~~
#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...