bzoj1510: [POI2006]Kra-The Disks

来源:互联网 发布:ps淘宝美工修裤子 编辑:程序博客网 时间:2024/06/05 08:31

传送门
首先一个下面直径比上面大的管子是然并卵的。
我们大可以把他当作上面的小管子。
然后就可以二分答案了。
但是盘子是不可以穿透的。
所以还要考虑叠在之前盘子之上的情况。

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define N 301000using namespace std;int n,m;int a[N],b[N];int sta[N],top;int main(){    scanf("%d%d",&n,&m);    for(int i=1;i<=n;i++)        scanf("%d",&a[i]);    for(int i=1;i<=m;i++)        scanf("%d",&b[i]);    for(int i=2;i<=n;i++)        if(a[i]>a[i-1])a[i]=a[i-1];    int l,r,la=n+1;    for(int i=1;i<=m;i++)    {        l=1,r=la-1;        int ans=r;        while(l<=r)        {            int mid=(l+r)>>1;            if(a[mid]<b[i])ans=mid,r=mid-1;            else l=mid+1;        }        la=ans;        if(a[ans]<b[i])la--;    }    printf("%d\n",la);}