Submission #628542

#TimeUsernameProblemLanguageResultExecution timeMemory
628542dqhungdl송신탑 (IOI22_towers)C++17
4 / 100
4078 ms9296 KiB
#include "towers.h"
#include <bits/stdc++.h>
using namespace std;

const int MAX = 1e5 + 5;
int N, maxH[MAX][20];
bool isMountain = true;
vector<int> H;

int get(int l, int r) {
    int k = log2(r - l + 1);
    return max(maxH[l][k], maxH[r - (1 << k) + 1][k]);
}

void init(int _N, vector<int> _H) {
    N = _N, H = _H;
    for (int i = 0; i < N; i++)
        maxH[i][0] = H[i];
    for (int t = 1; t <= 18; t++)
        for (int i = 0; i + (1 << t) - 1 < N; i++)
            maxH[i][t] = max(maxH[i][t - 1], maxH[i + (1 << (t - 1))][t - 1]);
    int id = max_element(H.begin(), H.end()) - H.begin();
    for (int i = id; i > 0 && isMountain; i--)
        isMountain &= (H[i] > H[i - 1]);
    for (int i = id; i < N - 1 && isMountain; i++)
        isMountain &= (H[i] > H[i + 1]);
}

int max_towers(int L, int R, int D) {
    if (isMountain)
        return get(L, R) - D >= max(H[L], H[R]) ? 2 : 1;
    vector<int> f(N, 1);
    int rs = 0;
    for (int i = 1; i < N; i++) {
        for (int j = 0; j < i - 1; j++)
            if (get(j + 1, i - 1) - D >= max(H[i], H[j]))
                f[i] = max(f[i], f[j] + 1);
        rs = max(rs, f[i]);
    }
    return rs;
}

//int main() {
//    freopen("../_input", "r", stdin);
//    int N, Q;
//    assert(2 == scanf("%d %d", &N, &Q));
//    std::vector<int> H(N);
//    for (int i = 0; i < N; ++i) {
//        assert(1 == scanf("%d", &H[i]));
//    }
//    init(N, H);
//
//    for (int i = 0; i < Q; ++i) {
//        int L, R, D;
//        assert(3 == scanf("%d %d %d", &L, &R, &D));
//        printf("%d\n", max_towers(L, R, D));
//    }
//    return 0;
//}
#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...