ABC393F
Lovely_yhb · · 题解
题意
给定一个长度为
有
思路
把询问按
设
发现同一时刻,
向后拓展
AC Code
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
struct node {int r,x,id,ans;} q[N];
bool cmp(node a,node b) {return a.r<b.r;}
bool cmp1(node a,node b) {return a.id<b.id;}
int n,Q,a[N],qi=1;
int main() {
ios::sync_with_stdio(0),cin.tie(0);
cin>>n>>Q;
for (int i=1; i<=n; i++) cin>>a[i];
for (int i=1; i<=Q; i++) cin>>q[i].r>>q[i].x,q[i].id=i;
sort(q+1,q+Q+1,cmp);
vector<int> f;
f.push_back(0);
for(int i=1; i<=n; i++) {
auto it=lower_bound(f.begin(),f.end(),a[i]);
if(it==f.end()) f.push_back(a[i]);
else *it=a[i];
while(qi<=Q&&q[qi].r==i) {
q[qi].ans=upper_bound(f.begin(), f.end(), q[qi].x)-f.begin()-1;
qi++;
}
}
sort(q+1,q+Q+1,cmp1);
for(int i=1;i<=Q;i++) cout<<q[i].ans<<endl;
return 0;
}