This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5;
int n, a[MAXN],l[MAXN];
bool ok = true;
int maxi = 0,idx=0;
void init(int N, vector<int> H){
n = N;
ok = false;
maxi = 0;
for (int i=0; i<n; ++i){
a[i] = H[i];
maxi = max(maxi,a[i]);
if (a[i] == maxi) idx = i;
}
}
int max_towers(int L, int R, int D){
if (R < idx or L > idx) return 1;
if (max(a[L],a[R]) <= maxi-D) return 2;
return 1;
int ans = 0;
if (!ok){
fill_n(&l[0],MAXN,0);
ok = true;
set<int> st;
st.emplace(INT_MAX);
st.emplace(INT_MIN);
vector<pair<int,int>> v;
for (int i=0; i<n; ++i){
v.emplace_back(a[i],i);
}
sort(v.begin(),v.end());
int idx = 0;
for (auto i:v){
while (idx < n and v[idx].first <= i.first-D){
st.emplace(v[idx].second);
idx++;
}
auto a = st.upper_bound(i.second), b = a;
--a;
if ((*b) != INT_MAX){
l[*b] = *a;
}
}
}
vector<int> dp(R+1,1);
for (int i=L; i<=R; ++i){
int prev = l[i];
if (prev >= L){
dp[i] = dp[prev]+1;
}
if (i) dp[i] = max(dp[i],dp[i-1]);
}
return dp[R];
}
Compilation message (stderr)
towers.cpp: In function 'int max_towers(int, int, int)':
towers.cpp:23:6: warning: unused variable 'ans' [-Wunused-variable]
23 | int ans = 0;
| ^~~
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |