Submission #1337859

#TimeUsernameProblemLanguageResultExecution timeMemory
1337859sitablechairRadio Towers (IOI22_towers)C++20
23 / 100
4059 ms3556 KiB
#include <bits/stdc++.h>
// #include "towers.h"
#define ll long long
#define ff first
#define ss second
#define pb push_back
#define sz(x) (signed)(x.size())
#define all(x) x.begin(),x.end()
#define unq(x) x.resize(unique(all(x))-x.begin())
#define For(i,l,r) for(int i=l;i<=r;i++)
#define ForD(i,r,l) for(int i=r;i>=l;i--)
#define endl '\n'
#define F "file"
#define fio freopen(F".inp","r",stdin);freopen(F".out","w",stdout);
using namespace std;

const int N=1e5+3;

int n,a[N],st[2*N],l1[N],r1[N];
stack<int> sta;

void build(int id,int l,int r) {
    if (l==r) return void(st[id]=a[l]);
    int mid=l+r>>1;
    build(id+1,l,mid);
    build(id+2*(mid-l+1),mid+1,r);
    st[id]=max(st[id+1],st[id+2*(mid-l+1)]);
}

int query(int id,int l,int r,int u,int v) {
    if (l>v || r<u) return -1;
    if (l>=u && r<=v) return st[id];
    int mid=l+r>>1;
    return max(query(id+1,l,mid,u,v),query(id+2*(mid-l+1),mid+1,r,u,v));
}

void init(int N,vector<int> H) {
    n=N;
    For(i,0,n-1) a[i+1]=H[i];
    fill(l1,l1+1+n,-1);
    fill(r1,r1+1+n,n+1);
    For(i,1,n) {
        while (sz(sta) && a[sta.top()]>a[i]) {
            r1[sta.top()]=i;
            sta.pop();
        }
        sta.push(i);
    }
    while(sz(sta)) sta.pop();
    ForD(i,n,1) {
        while (sz(sta) && a[sta.top()]>a[i]) {
            l1[sta.top()]=i;
            sta.pop();
        }
        sta.push(i);
    }
    build(1,1,n);
}

int max_towers(int l,int r,int d) {
    l++,r++;
    int ans=0;
    For(i,l,r) {
        bool check=1;
        if (l1[i]>=l) check&=(query(1,1,n,l1[i],i)-d>=a[i]);
        if (r1[i]<=r) check&=(query(1,1,n,i,r1[i])-d>=a[i]);
        ans+=check;
    }
    return ans;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...