#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |