168752025-05-15 10:06:58HoraHadjáratcpp17Hibás válasz 48/100153ms1956 KiB
#include <bits/stdc++.h>
using namespace std;

vector<set<array<int, 2>>> lis;

void add(array<int, 2> a, set<array<int, 2>>& s){
    s.insert(a);
    auto it = s.upper_bound(a);
    while(it != s.end()){
        if((*it)[1] >= a[1]) it = s.erase(it);
        else break;
    }
}

bool check(array<int, 2> a, set<array<int, 2>>& s){
    auto it = s.upper_bound({a[0], -1});
    if(it == s.begin()) return false;
    it--;
    return ((*it)[1] < a[1]);
}

void solve(array<int, 2> a){
    int lo = -1, hi = lis.size(), mid;
    while(lo + 1 < hi){
        mid = (lo + hi) / 2;
        if(check(a, lis[mid])) lo = mid;
        else hi = mid;
    }
    if(lo + 1 >= lis.size()) lis.push_back({});
    add(a, lis[lo + 1]);
}

int main() {
    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
        array<int, 2> a;
        cin >> a[0] >> a[1];
        solve(a);
    }
    cout << lis.size();
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base48/100
1Hibás válasz0/01ms316 KiB
2Hibás válasz0/071ms1076 KiB
3Részben helyes2/41ms316 KiB
4Részben helyes2/41ms316 KiB
5Részben helyes2/41ms316 KiB
6Részben helyes2/41ms316 KiB
7Részben helyes2/41ms316 KiB
8Hibás válasz0/41ms316 KiB
9Részben helyes2/41ms316 KiB
10Részben helyes2/42ms316 KiB
11Részben helyes2/47ms488 KiB
12Részben helyes2/413ms528 KiB
13Részben helyes3/612ms316 KiB
14Részben helyes3/625ms668 KiB
15Részben helyes3/641ms672 KiB
16Részben helyes3/670ms1080 KiB
17Részben helyes3/689ms1332 KiB
18Részben helyes3/6104ms1332 KiB
19Részben helyes3/6120ms1588 KiB
20Részben helyes3/6153ms1956 KiB
21Részben helyes3/6153ms1812 KiB
22Részben helyes3/6153ms1852 KiB