제출 #1267367

#제출 시각아이디문제언어결과실행 시간메모리
1267367dhuyyyyMatryoshka (JOI16_matryoshka)C++20
100 / 100
104 ms14252 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define int long long
using namespace std;

using ll = long long;
using ii = pair<int,int>;
using pii = pair<int,ii>;
using aa = array<int,3>;

const int N = 2e5+5;
const int INF = 1e9;
const int MOD = 1e9+21;

int n, m, q;

int ans[N];

ii doll[N];

aa query[N];

vector <ii> dp;

/*
minimum increasing sequences of an array

==

longest non-increasing sequence of that array
*/
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    cin >> n >> q;
    for (int i = 1; i <= n; i++){
        cin >> doll[i].fi >> doll[i].se;
        doll[i].se = -doll[i].se; //avoid h[i] > h[j] but r[i] == r[j] when cnp
    }
    sort(doll+1,doll+1+n,greater<ii>());
    for (int i = 1; i <= q; i++){
        cin >> query[i][0] >> query[i][1];
        query[i][2] = i;
    }
    sort(query+1,query+1+q,greater<aa>());
    int j = 1;
    for (int i = 1; i <= q; i++){
        while (j <= n && doll[j].fi >= query[i][0]){
            int LNIS = upper_bound(dp.begin(),dp.end(),make_pair(-doll[j].se,INF)) - dp.begin();
            if (LNIS == (int)dp.size()) dp.push_back({-doll[j].se,doll[j].fi});
            else dp[LNIS] = {-doll[j].se,doll[j].fi};
            j++;
        }
        ans[query[i][2]] = upper_bound(dp.begin(),dp.end(),make_pair(query[i][1],INF)) - dp.begin();
    }
    for (int i = 1; i <= q; i++) cout << ans[i] << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...