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;
}
posted @ 2020-10-26 17:05  童年の波鞋  阅读(92)  评论(0编辑  收藏  举报