제출 #898382

#제출 시각아이디문제언어결과실행 시간메모리
898382votranngocvyHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
0 / 100
1176 ms119740 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define piii pair<int,pair<int,int>> #define fi first #define se second const int N = 1e6 + 5; int st[4 * N],a[N],ans[N],f[N]; vector<piii>vec[N]; void update(int id,int l,int r,int i,int val) { if (i < l || r < i) return; if (l == r) { st[id] = val; return; } int mid = (l + r) / 2; update(id * 2,l,mid,i,val); update(id * 2 + 1,mid + 1,r,i,val); st[id] = max(st[id * 2],st[id * 2 + 1]); } int get(int id,int l,int r,int u,int v) { if (v < l || r < u) return 0; if (u <= l && r <= v) return st[id]; int mid = (l + r) / 2; return max(get(id * 2,l,mid,u,v),get(id * 2 + 1,mid + 1,r,u,v)); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m; cin >> n >> m; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= m; i++) { int l,r,k; cin >> l >> r >> k; vec[r].push_back({l,{i,k}}); } a[0] = 0; stack<int>st; for (int i = 1; i <= n; i++) { while (!st.empty() && a[st.top()] <= a[i]) st.pop(); if (!st.empty()) f[i] = st.top(); else f[i] = 0; st.push(i); } for (int i = 1; i <= n; i++) update(1,1,n,i,a[f[i]] + a[i]); for (int r = 1; r <= n; r++) { for (auto x: vec[r]) { int l = x.fi,idx = x.se.fi,k = x.se.se; ans[idx] = (get(1,1,n,l,r) <= k); } } for (int i = 1; i <= m; i++) cout << ans[i] << "\n"; }
#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...