bzoj 1510 Kra-The Disks —— 思路

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1510

一个位置比上面还宽就没用了,而且会收到上面的限制,所以跟上面取 min 即可;

然后维护一个指针,没有可放的位置就无解了。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const xn=3e5+5;
int n,m,r[xn],k[xn];
int rd()
{
  int ret=0,f=1; char ch=getchar();
  while(ch<'0'||ch>'9'){if(ch=='-')f=0; ch=getchar();}
  while(ch>='0'&&ch<='9')ret=(ret<<3)+(ret<<1)+ch-'0',ch=getchar();
  return f?ret:-ret;
}
int main()
{
  n=rd(); m=rd();
  for(int i=1;i<=n;i++)
    {
      r[i]=rd();
      if(i>1)r[i]=min(r[i],r[i-1]);//
    }
  for(int i=1;i<=m;i++)k[i]=rd();
  bool fl=0; int p=n;
  for(int i=1;i<=m;i++)
    {
      while(p&&r[p]<k[i])p--;
      if(!p){fl=1; break;}
      p--;
    }
  if(fl)puts("0");
  else printf("%d\n",p+1);
  return 0;
}

 

posted @ 2018-10-27 09:33  Zinn  阅读(125)  评论(0编辑  收藏  举报