Submission #1281278

#TimeUsernameProblemLanguageResultExecution timeMemory
1281278LmaoLmaoMatryoshka (JOI16_matryoshka)C++20
100 / 100
145 ms17632 KiB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define name "a"
using namespace std;

using ii = pair<int,int>;
using aa = array<int,3>;
const int N=4e5+5;

aa qr[N];
ii a[N];
int ans[N];
int F[N],mp[N];

void update(int pos,int val) {
    for(int i=pos;i<N;i+=i & -i) {
        F[i]=max(F[i],val);
    }
}
int get(int pos) {
    int res=0;
    for(int i=pos;i>0;i-= i & -i) {
        res=max(res,F[i]);
    }
    return res;
}
vector<ii> dp;
vector<int> nen;

int getnen(int x) {
    return lower_bound(nen.begin(),nen.end(),x)-nen.begin()+1;
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    int n,q;
    cin >> n >> q;
    for(int i=1;i<=n;i++) {
        cin >> a[i].fi >> a[i].se;
        a[i].fi*=-1;
        nen.push_back(a[i].se);
    }
    for(int i=1;i<=q;i++) {
        cin >> qr[i][0] >> qr[i][1];
        qr[i][2]=i;
        qr[i][0]*=-1;
        nen.push_back(qr[i][1]);
    }
    sort(nen.begin(),nen.end());
    sort(a+1,a+1+n);
    sort(qr+1,qr+1+q);
    int j=1;
    int res=0;
    for(int i=1;i<=q;i++) {
        while(j<=n && a[j].fi<=qr[i][0]) {
            int LNIS=upper_bound(dp.begin(),dp.end(),make_pair(a[j].se,(int)1e9))-dp.begin();
            if(LNIS==dp.size()) dp.push_back(make_pair(a[j].se,-a[j].fi));
            else dp[LNIS]={a[j].se,-a[j].fi};
            j++;
        }
        ans[qr[i][2]]=upper_bound(dp.begin(),dp.end(),make_pair(qr[i][1],(int)1e9))-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...