제출 #1171768

#제출 시각아이디문제언어결과실행 시간메모리
1171768coolboy19521Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
0 / 100
1825 ms41700 KiB
#include "bits/stdc++.h" #define mxN 1000006 using namespace std; struct stree{ int ar[4 * mxN]; void upd(int i, int x, int l, int r, int v){ assert(v < 4 * mxN); if (l < r){ int mi = (l + r) / 2; if (i <= mi) upd(i, x, l, mi, v * 2); else upd(i, x, mi + 1, r, v * 2 + 1); assert(v * 2 < 4 * mxN); assert(v * 2 + 1 < 4 * mxN); ar[v] = max(ar[v * 2], ar[v * 2 + 1]); } else ar[v] = x; } int qry(int a, int b, int l, int r, int v){ assert(v < 4 * mxN); if (a <= l && r <= b) return ar[v]; else if (a <= r && l <= b){ int mi = (l + r) / 2; int ans = 0; int lr = qry(a, b, l, mi, v * 2); int rr = qry(a, b, mi + 1, r, v * 2 + 1); return max(lr, rr); } else return INT_MIN; } } st; int ans[mxN]; int w[mxN]; int main(){ memset(st.ar, 0xc0, sizeof(st.ar)); int N, M; cin >> N >> M; for (int i = 1; i <= N; i ++) cin >> w[i]; vector<tuple<int,int,int,int>> qrys; for (int i = 1; i <= M; i ++){ int L, R, K; cin >> L >> R >> K; qrys.emplace_back(R, L, K, i); } sort(begin(qrys), end(qrys)); stack<int> stk; int ls = 0; for (int i = 0; i < M; i ++){ auto& [R, L, K, I] = qrys[i]; if (ls < R){ for (int j = ls + 1; j <= R; j ++){ while (stk.size() && w[stk.top()] < w[j]){ stk.pop(); } if (stk.size()){ int v = stk.top(); st.upd(v, w[v] + w[j], 1, N, 1); } stk.push(j); } ls = R; } int loc = st.qry(L, R, 1, N, 1); ans[I] = loc <= K; } for (int i = 1; i <= M; i ++) cout << ans[i] << endl; }
#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...