这题常规做很简单,但提交会时间超限,超限代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
int s1[n],s2[m];
for(int i=0;i<n;i++)
cin>>s1[i];
for(int i=0;i<m;i++)
cin>>s2[i];
int flag=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(s1[j]<=s2[i])
flag++;
}
cout<<flag<<endl;
flag=0;
}
}
return 0;
}
改的第二次也超限是因为用了cin cout 改过来就对了
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
int x;
int num[1001]={0};
for(int i=0;i<n;i++)
{
scanf("%d",&x);
num[x]++;
}
for(int i=1;i<1001;i++)
num[i]=num[i]+num[i-1];
for(int i=0;i<m;i++)
{
scanf("%d",&x);
printf("%d\n",num[x]);
}
}
return 0;
}
x在num数组里是下标,所以当把num赋完值以后,下标的顺序也排序好了,num[i]=num[i]+num[i-1]是记录x从小到大排序的有几个下下标为x的数