이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define int int64_t
#define pb push_back
#define pii pair<int, int>
#define st first
#define nd second
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
struct SegTree {
const static int T = 1<<20;
int t[2*T];
void update(int x, int val) {
x+=T;
t[x] = max(t[x], val);
x/=2;
while(x) {
t[x] = max(t[2*x], t[2*x+1]);
x/=2;
}
}
int query(int l, int r) {
l+=T;
r+=T;
int ret = max(t[l], t[r]);
while(l/2!=r/2) {
if(l%2==0) ret = max(ret, t[l+1]);
if(r%2==1) ret = max(ret, t[r-1]);
l/=2;
r/=2;
}
return ret;
}
};
SegTree seg;
vector<pii> v[1000009];
int tab[1000009];
int ans[1000009];
vector<tuple<int, int, int, int>> Q;
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, q;
cin >> n >> q;
for(int i=0;i<n;i++) {
cin >> tab[i];
}
vector<pii> s;
for(int i=0;i<n;i++) {
while(sz(s)&&s.back().nd<=tab[i]) {
s.pop_back();
}
if(sz(s)) {
v[s.back().st].pb({i, tab[i]+tab[s.back().st]});
}
s.pb({i, tab[i]});
}
for(int i=0;i<q;i++) {
int l, r, k;
cin >> l >> r >> k;
l--;
r--;
Q.pb({-l, r, k, i});
}
sort(all(Q));
int cnt = n-1;
for(auto [l, r, k, id]:Q) {
l = -l;
while(cnt>=0&&cnt>=l) {
for(pii x:v[cnt]) {
seg.update(x.st, x.nd);
}
cnt--;
}
ans[id] = (k>=seg.query(0, r));
}
for(int i=0;i<q;i++) {
cout << ans[i] << "\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |