http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1279
这道题要求的就是当顶被封之前有多少盘被扔下去= =当顶被封住时 即使下面的盘子再小也不能扔下去
我们用a[]保存井的宽度,数组b[]来保存盘子的大小
首先盘子j要是能到达第i米,则需要满足min(a[0~i])>=b[j];
所以我们只需保存最小值便可
1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include<algorithm> 5 #define maxn 10000 6 using namespace std; 7 int a[maxn],b[maxn]; 8 int main() 9 { 10 int n,m; 11 scanf("%d %d",&n,&m); 12 for(int i=0;i<n;i++) 13 { 14 scanf("%d",&a[i]); 15 } 16 for(int i=0;i<m;i++) 17 { 18 scanf("%d",&b[i]); 19 } 20 int ans=0; 21 for(int i=1;i<n;i++) 22 { 23 a[i]=min(a[i-1],a[i]); 24 } 25 for(int i=0;i<m;i++) 26 { 27 for(--n;n>=0&&a[n]<b[i];--n);//求出当前的盘子被卡在第几层 28 if(n>=0) 29 ans++; 30 else 31 break;//当盘子到达井口时跳出循环 32 } 33 printf("%d ",ans); 34 return 0; 35 }