52762023-04-25 09:26:13sztomiTornyokcpp11Időlimit túllépés 42/100486ms96936 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e6;
const int MAXK = 1e5;
const int INF = 1e9 + 7;

int magas[MAXN+1];
int indexek[MAXN];

int megoldas[MAXN+1];

int max_level_tav[MAXN]{0};
int szulo[MAXN];

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

    int n, k;
    cin >> n >> k;
    int min_magas=INF, max_magas=-1;
    for(int i = 0; i < n; i++){
        cin >> magas[i];
        min_magas = min(min_magas, magas[i]);
        max_magas = max(max_magas, magas[i]);
        indexek[i] = i;
    }

    sort(indexek, indexek + n, [&magas](const int& a, const int &b){
                return magas[a] < magas[b];
         });

    // nala nagyobbak indexei
    set<int, greater<int>> aktiv_ind;
    set<int, greater<int>>::iterator it;
    for(int i = n-1; i >= 0; --i){
        it = aktiv_ind.upper_bound(indexek[i]);
        if(it != aktiv_ind.end()){
            szulo[i] = *it;
        }
        else{
            szulo[i] = -1;
        }
        aktiv_ind.insert(indexek[i]);
    }

    /*
    for(int i = 0; i < n; ++i){
        if(!volt.test(i)){
            dfs(i);
        }
    }
    */

    megoldas[0] = 0;
    for(int i = 1; i <= n; i++){
        if(max_level_tav[indexek[i-1]] == 0){
            max_level_tav[indexek[i-1]] = 1;
        }
        if(szulo[i-1] != -1){
            max_level_tav[szulo[i-1]] = max(max_level_tav[szulo[i-1]], max_level_tav[indexek[i-1]] + 1);
        }
        megoldas[i] = max(megoldas[i-1], max_level_tav[indexek[i-1]]);
    }

    vector<int> kerdesek(k);
    vector<int> kerdes_ind(k);
    for(int i = 0; i < k; i++){
        cin >> kerdesek[i];
        kerdes_ind[i] = i;
    }
    sort(kerdes_ind.begin(), kerdes_ind.end(), [&kerdesek](const int &a, const int &b){
            return kerdesek[a] < kerdesek[b];
         });

    vector<int> valasz(k);

    magas[n] = INF;
    int temp_ind = 0;
    for(int i = 0; i <= n; i++){
        while(temp_ind < k && kerdesek[kerdes_ind[temp_ind]] <= magas[indexek[i]]){
            valasz[kerdes_ind[temp_ind]] = megoldas[i];
            temp_ind++;
        }
    }

    for(int i = 0; i < k; i++){
        cout << valasz[i] << " ";
    }
    cout << "\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base42/100
1Elfogadva0/03ms1976 KiB
2Időlimit túllépés0/0474ms51712 KiB
3Elfogadva2/23ms2628 KiB
4Elfogadva2/23ms2532 KiB
5Elfogadva6/63ms2768 KiB
6Elfogadva6/63ms2980 KiB
7Elfogadva4/426ms10240 KiB
8Elfogadva4/450ms16172 KiB
9Elfogadva8/8293ms56312 KiB
10Időlimit túllépés0/8456ms42512 KiB
11Időlimit túllépés0/5486ms58504 KiB
12Időlimit túllépés0/5430ms41428 KiB
13Elfogadva5/5112ms27780 KiB
14Elfogadva5/5307ms57044 KiB
15Időlimit túllépés0/5470ms43144 KiB
16Időlimit túllépés0/5444ms96936 KiB
17Időlimit túllépés0/5453ms50360 KiB
18Időlimit túllépés0/5476ms49956 KiB
19Időlimit túllépés0/5439ms43584 KiB
20Időlimit túllépés0/5479ms40712 KiB
21Időlimit túllépés0/5472ms40052 KiB
22Időlimit túllépés0/5456ms40468 KiB