이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n;
vector<ll> fenwick; // for max
void print()
{
cout << "Fenwick:\n";
for (int i=0; i<=n; i++) cout << fenwick[i] << ' ';
cout << '\n';
}
void upd(int i, ll val)
{
while (i > 0)
{
fenwick[i] = max(fenwick[i], val);
i -= -i&i;
}
//print();
}
ll get(int r)
{
ll mx = 0;
while (r <= n)
{
mx = max(mx, fenwick[r]);
r += -r&r;
}
//print();
return mx;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int m;
cin >> n >> m;
fenwick.assign(n, 0);
//print();
ll w[n];
for (int i=1; i<=n; i++)
cin >> w[i];
vector< pair< pair <ll, ll>, ll > > que[n+1];
for (int i=0; i<m; i++)
{
ll l, r, k;
cin >> l >> r >> k;
que[r].push_back({{l, k}, i});
}
ll ans[m];
stack<int> st;
st.push(0);
for (int i=1; i<=n; i++)
{
while (!st.empty() and w[i] >= w[st.top()])
st.pop();
if (!st.empty())
upd(st.top(), w[st.top()]+w[i]);
for (auto q : que[i])
{
ans[q.second] = get(q.first.first)<=q.first.second;
}
st.push(i);
}
for (int i=0; i<m; 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... |