先对井进行优化一下
例如从上到下井口大小 6 4 8 5 3
优化后的井口为 6 4 4 4 3
意思就是把多余的井口长度去掉,因为下面的井口必须小于等于当前最小长度的井口
然后进行栈模拟
TIP:注意!!!!minn设的初值大一点。我开始用的1<<29错误!!小于1e9了
#include<iostream>
#include<queue>
#include<vector>
#include<stack>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<cstdio>
using namespace std;
int main(){
int n,m;
scanf("%d%d",&n,&m);
stack<int> sta;
int a[500001];
int minn=1<<30;
for(int i=0;i<n;i++){
int num;
scanf("%d",&num);
minn=min(minn,num);
a[i]=minn;
}
for(int i=0;i<n;i++){
sta.push(a[i]);
}
int sum=0;
for(int i=0;i<m;i++){
int num;
scanf("%d",&num);
if(sta.size()==0) continue;
while(sta.size()){
long long top=sta.top();
sta.pop();
if(top>=num){
sum++;
break;
}
}
}
printf("%d",sum);
return 0;
}