b_51_扔盘子(从极端角度考虑)
现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度,则圆盘被卡住
求最终落到井内的盘子数量
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,m,ans,a[N],b[N];
int main() {
std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>n>>m;
int mi=0x3f3f3f3f, x;
for (int i=0; i<n; i++) cin>>x, mi=min(mi,x), a[i]=mi; //后面的都是栈顶元素,所以只要你比栈顶的宽一点,你放进去后,你就成了障碍了,所以放入位置后面的都没用了
for (int i=0, j=n-1; i<m; i++) {
int w; cin>>w;
while (j>=0 && w>a[j]) j--;
if (j>=0) ans++, j--; //第一个合适的位置,此时放下盘子,这个位置就被占领了,j--
}
cout<<ans;
return 0;
}