166012025-05-06 20:32:17algoproTornyokcpp17Futási hiba 0/100351ms160000 KiB
// UUID: 6e28e3ea-0a5c-4074-aa72-e2c39a88690f
#pragma GCC optimize("O3,no-stack-protector")
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1000005;
const int MAXK = 100005;

int n, k;
int h[MAXN];            // épületmagasságok
int towerH[MAXK];       // toronymagasságok
int numLess[MAXN];      // DP: hány épület "fogható" innen nyugatra
long long sortedArr[MAXN + MAXK]; // rendezéshez

int child[MAXN];        // az épület "közvetlen" nyugatabbra eső alacsonyabb gyereke

int calcLess(int idx) {
    if (numLess[idx] >= 0) return numLess[idx];
    if (child[idx] == -1) return numLess[idx] = 0;
    return numLess[idx] = calcLess(child[idx]) + 1;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n >> k;

    for (int i = 0; i < n; i++) {
        cin >> h[i];
        sortedArr[i] = ((long long)h[i] << 32) | i;
    }

    for (int i = 0; i < k; i++) {
        cin >> towerH[i];
        sortedArr[n + i] = ((long long)towerH[i] << 32) | (n + i);
    }

    h[n] = INT_MAX;
    sortedArr[n + k] = ((long long)h[n] << 32) | n;

    // Építjük a "child" tömböt: minden épülethez a legközelebbi nyugatabbra lévő kisebb
    stack<int> st;
    st.push(n); // sentinel
    for (int i = 0; i < n; i++) {
        while (h[st.top()] < h[i]) st.pop();
        child[st.top()] = i;
        st.push(i);
    }

    memset(numLess, -1, sizeof(numLess));
    calcLess(n);

    sort(sortedArr, sortedArr + n + k);

    int bestSoFar = 0;
    for (int i = 0; i < n + k; i++) {
        int idx = sortedArr[i] & 0xffffffff;
        if (idx >= n) {
            towerH[idx - n] = bestSoFar + 1;
        } else {
            bestSoFar = max(bestSoFar, numLess[idx]);
        }
    }

    for (int i = 0; i < k; i++) {
        cout << towerH[i] << ' ';
    }
    cout << '\n';

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/100
1Futási hiba0/0184ms160000 KiB
2Futási hiba0/0326ms160000 KiB
3Futási hiba0/2184ms160000 KiB
4Futási hiba0/2159ms160000 KiB
5Futási hiba0/6157ms160000 KiB
6Futási hiba0/6186ms160000 KiB
7Futási hiba0/4194ms160000 KiB
8Futási hiba0/4171ms160000 KiB
9Futási hiba0/8204ms160000 KiB
10Futási hiba0/8250ms160000 KiB
11Futási hiba0/5321ms160000 KiB
12Futási hiba0/5342ms160000 KiB
13Futási hiba0/5217ms160000 KiB
14Futási hiba0/5204ms160000 KiB
15Futási hiba0/5254ms160000 KiB
16Futási hiba0/5300ms160000 KiB
17Futási hiba0/5298ms160000 KiB
18Futási hiba0/5326ms160000 KiB
19Futási hiba0/5351ms160000 KiB
20Futási hiba0/5314ms160000 KiB
21Futási hiba0/5289ms160000 KiB
22Futási hiba0/5293ms160000 KiB