제출 #705596

#제출 시각아이디문제언어결과실행 시간메모리
705596danikoynov송신탑 (IOI22_towers)C++17
11 / 100
4051 ms1572 KiB
#include "towers.h"

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;

int n, h[maxn];
void init(int N, std::vector<int> H)
{
    n = N;
    for (int i = 0; i < n; i ++)
        h[i] = H[i];
}

int par[maxn], rnk[maxn];

int find_leader(int v)
{
    return (v == par[v]) ? v : par[v] = find_leader(par[v]);
}

void unite(int v, int u)
{
    v = find_leader(v);
    u = find_leader(u);
    if (v == u)
        return;

    if (rnk[v] < rnk[u])
        swap(v, u);
    rnk[v] += rnk[u];
    par[u] = v;
}

int dp[maxn];
int max_towers(int L, int R, int D)
{
    for (int i = L; i <= R; i ++)
    {
        dp[i] = 1;
    }

    for (int i = L; i <= R; i ++)
    {
        int max_tower = 0;
        for (int j = i - 1; j >= L; j --)
        {
            if (max_tower - D >= h[i] && max_tower - D >= h[j])
                dp[i] = max(dp[i], dp[j] + 1);
            max_tower = max(max_tower, h[j]);
        }
    }

    int ans = 0;
    for (int i = L; i <= R; i ++)
        ans = max(ans, dp[i]);
    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...