#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=50000+10;
struct node
{
int id;
int val;
}p[maxn],q[maxn];
int vis[maxn],ans[maxn];
bool cmp(node a,node b)
{
return a.val>b.val;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i].val);
p[i].id=i;
}
for(int i=1;i<=m;i++)
{
scanf("%d",&q[i].val);
q[i].id=i;
}
sort(p+1,p+n+1,cmp);
sort(q+1,q+m+1,cmp);
int pos=1,curans=0;
for(int i=1;i<=m;i++)
{
while(pos<=n&&p[pos].val>q[i].val)
{
vis[p[pos].id]=1;
curans++;
if(vis[p[pos].id-1]) curans--;
if(vis[p[pos].id+1]) curans--;
pos++;
}
ans[q[i].id]=curans;
}
for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
}
}
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=50000+10;
struct node
{
int id;
int val;
}p[maxn],q[maxn];
int vis[maxn],ans[maxn];
bool cmp(node a,node b)
{
return a.val>b.val;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i].val);
p[i].id=i;
}
for(int i=1;i<=m;i++)
{
scanf("%d",&q[i].val);
q[i].id=i;
}
sort(p+1,p+n+1,cmp);
sort(q+1,q+m+1,cmp);
int pos=1,curans=0;
for(int i=1;i<=m;i++)
{
while(pos<=n&&p[pos].val>q[i].val)
{
vis[p[pos].id]=1;
curans++;
if(vis[p[pos].id-1]) curans--;
if(vis[p[pos].id+1]) curans--;
pos++;
}
ans[q[i].id]=curans;
}
for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
}
}
本文探讨了排序算法在数据处理中的应用,包括常见排序算法的原理、优缺点及实际应用场景,旨在帮助读者理解如何选择合适的排序算法解决具体问题。
374

被折叠的 条评论
为什么被折叠?



