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...