제출 #1337496

#제출 시각아이디문제언어결과실행 시간메모리
1337496hyyhExhibition (JOI19_ho_t2)C++20
0 / 100
1 ms344 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <tuple>
#include <math.h>
#include <cstring>
#include <bitset>
#include <set>
#include <map>

#define int long long

using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;

#define endl '\n'
#define f first
#define s second
#define all(x) begin(x),end(x)
#define m_p make_pair

int const INF = 1e18+7;

signed main(){
    int n;cin >> n;
    int m;cin >> m;
    vector<pii> vc1;
    vector<int> vc2;
    for(int i{};i < n;i++){
        int a,b;cin >> a >> b;
        vc1.emplace_back(a,b);
    }
    for(int i{};i < m;i++){
        int a;cin >> a;
        vc2.emplace_back(a);
    }
    sort(all(vc2));
    sort(all(vc1));
    priority_queue<int,vector<int>,greater<int>> pq;
    vector<int> vc;
    int cur = 0;
    for(int i{};i < m;i++){
        int it = (upper_bound(all(vc1),m_p(vc2[i],INF))-vc1.begin())-1;
        //cout << it << endl;
        for(int i{cur};i <= it;i++){
            pq.emplace(vc1[i].s);
        }
        cur = it+1;
        if(!pq.empty()){
            vc.emplace_back(pq.top());
            pq.pop();
        }
    }
    vector<int> lis = {0};
    for(auto k:vc){
        auto it = upper_bound(all(lis),k);
        if(it == lis.end()) lis.emplace_back(k);
        else *it = k;
    }
    cout << lis.size()-1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...