#include "towers.h"
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define lf ((id)<<1)
#define rg ((id<<1)|1)
#define md ((l+r)>>1)
using namespace std;
typedef pair<ll,ll> pii;
typedef pair<ll,pii> ipii;
const int MAXN = 3e5+100;
const int LOG = 19;
const ll INF = 2e18+10;
const int INF2 = 2e9+10;
void chmx(auto &a, auto b){ a = max(a, b); }
void chmn(auto &a, auto b){ a = min(a, b); }
int n, h[MAXN];
struct seg {
int st[4*MAXN];
void bd(int id,int l,int r){
if(l==r){
st[id] = h[l]; return;
}
bd(lf,l,md); bd(rg,md+1,r);
st[id] = max(st[lf], st[rg]);
}
int upd(int id,int l,int r,int x,int y){
if(l==r && l==x) return st[id] = y;
if(r<x || x<l) return st[id];
return st[id] = max(upd(lf,l,md,x,y), upd(rg,md+1,r,x,y));
}
int que(int id,int l,int r,int x,int y){
if(x<=l && r<=y) return st[id];
if(r<x || y<l) return 0;
return max(que(lf,l,md,x,y), que(rg,md+1,r,x,y));
}
} A, B;
void init(int N, std::vector<int> H) {
n = N;
for(int i=1; i<=n; i++){
h[i] = H[i-1];
}
B.bd(1,1,n);
}
int dp[MAXN];
int max_towers(int L, int R, int D) {
int l = L+1, r = R+1, d = D;
if(l==r || l+1==r) return 1;
priority_queue<pii, vector<pii>, greater<pii>> pq;
for(int i=L+1; i<=R+1; i++){
while(!pq.empty() && pq.top().fi+d <= h[i]){
int id = pq.top().se;
A.upd(1,1,n,id, dp[id]);
pq.pop();
}
pq.push({h[i], i});
int l=1, r=i-1, mid=0, cnt=-1;
while(l<=r){
mid = md;
if(B.que(1,1,n,mid,i-1) >= h[i]+d){
cnt = mid; l = mid+1;
} else r = mid-1;
}
dp[i] = 1;
if(cnt != -1) dp[i] = A.que(1,1,n,1,cnt-1)+1;
}
int ANS = 0;
for(int i=L+1; i<=R+1; i++) chmx(ANS, dp[i]);
return ANS;
}
| # | 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... |