제출 #1320055

#제출 시각아이디문제언어결과실행 시간메모리
1320055BigBadBully송신탑 (IOI22_towers)C++20
14 / 100
276 ms2324 KiB
#include "towers.h"

#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> v,pref;

bool check(int i)
{
    return ((i==0 || v[i] < v[i-1])&&(i==n-1 || v[i] < v[i+1]));
}

vector<int> raz;

void init(int N, std::vector<int> H) {
    v = H;
    n = N;
    pref.resize(n,0);
    for(int i = 0; i < n; i++)
        pref[i] = (i>0?pref[i-1]:0)+check(i);
    int prev = 0;
    for(;!check(prev);prev++);
    for(int i = prev+1,run = 0; i < n; i++)
    {
        if(check(i))
        {
            raz.push_back(run-max(v[i],v[prev]));
            prev = i;
            run = 0;
        }
        else
            run = max(v[i],run);
    }
}

int max_towers(int l, int r, int d) {
    if(l==r)return 1;
    if(d==1)
        return pref[r]-(l>0?pref[l-1]:0) - check(l)- check(r)+(v[l] < v[l+1])+(v[r]<v[r-1]);
    if(r-l==n-1)
    {
        return raz.end()-upper_bound(raz.begin(),raz.end(),d)+1;
    }
    return 41;
}
#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...