113552024-08-22 11:05:36HoraHadjáratcpp17Hibás válasz 4/100172ms868 KiB
#include<iostream>
#include<array>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;

vector<set<array<int, 3>>> lis;
vector<int> parent;

bool query(array<int, 3> a, int x){
    array<int, 3> s = {a[0], -1, -1};
    auto it = lower_bound(lis[x].begin(), lis[x].end(), s);
    if(it != lis[x].begin()) it--;
    return a[1] > (*it)[1];
}

int idquery(array<int, 3> a, int x){
    if(x == 0) return -1;
    array<int, 3> s = {a[0], -1, -1};
    auto it = lower_bound(lis[x].begin(), lis[x].end(), s);
    if(it != lis[x].begin()) it--;
    return (*it)[2];
}

void add(array<int, 3> a, int x){
    lis[x].insert(a);
    auto it = upper_bound(lis[x].begin(), lis[x].end(), a);
    while(it != lis[x].end()){
        it = lis[x].erase(it);
    }
}

int main(){
    int n;
    cin >> n;
    lis.push_back({{0, 0, 0}});
    parent.resize(n);
    for(int i = 0; i < n; i++){
        array<int, 3> a;
        cin >> a[0] >> a[1];
        a[2] = i;
        int lo = 0, hi = lis.size(), mid;
        while(lo + 1 < hi){
            mid = (lo + hi) / 2;
            if(query(a, mid)) lo = mid;
            else hi = mid;
        }
        parent[i] = idquery(a, lo);
        if(lo + 1 == lis.size()){
            lis.push_back({a});
        }
        else add(a, lo + 1);
    }
    cout << lis.size() - 1 << "\n";
    /*int m = (*lis[lis.size() - 1].begin())[2];
    vector<int> ans;
    while(m != -1){
        ans.push_back(m + 1);
        m = parent[m];
    }
    reverse(ans.begin(), ans.end());
    for(auto x : ans) cout << x << " ";*/
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base4/100
1Hibás válasz0/03ms528 KiB
2Hibás válasz0/079ms664 KiB
3Hibás válasz0/43ms488 KiB
4Hibás válasz0/43ms396 KiB
5Hibás válasz0/42ms232 KiB
6Részben helyes2/42ms376 KiB
7Hibás válasz0/43ms484 KiB
8Hibás válasz0/42ms504 KiB
9Hibás válasz0/42ms504 KiB
10Részben helyes2/44ms356 KiB
11Hibás válasz0/49ms356 KiB
12Hibás válasz0/417ms356 KiB
13Hibás válasz0/614ms500 KiB
14Hibás válasz0/629ms508 KiB
15Hibás válasz0/648ms632 KiB
16Hibás válasz0/679ms612 KiB
17Hibás válasz0/6100ms616 KiB
18Hibás válasz0/6118ms740 KiB
19Hibás válasz0/6136ms752 KiB
20Hibás válasz0/6168ms868 KiB
21Hibás válasz0/6171ms832 KiB
22Hibás válasz0/6172ms740 KiB