社区讨论
归并排序没输出,怎么办啊
P1309[NOIP 2011 普及组] 瑞士轮参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m42p3ohg
- 此快照首次捕获于
- 2024/11/29 20:03 去年
- 此快照最后确认于
- 2025/11/04 13:39 4 个月前
麻烦大佬帮忙看看这里的归并排序( 函数 void guibing() )有什么问题
CPP#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
int n,r,q,m;
inline void read(int& a)
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
s=s*10+ch-'0';
ch=getchar();
}
a=w*s;
}
struct app{
int s,w,id;
}a[N*2],b[N+N];
bool cmp(app a,app b)
{
if(a.s==b.s)
return a.id<b.id;
return a.s>b.s;
}
void guibing(int l,int r)
{
int mid=(r-l)>>1+l;
guibing(l,mid);
guibing(mid+1,r);
int p=0,i=l,j=mid+1;
while(i<=mid&&j<=r)
{
if(a[i].s>a[j].s)
{
b[p++]=a[i++];
}
else
b[p++]=a[j++];
}
while(i<=mid)b[p++]=a[i++];
while(j<=r)b[p++]=a[j++];
for(int i=l,j=0;i<=r;i++,j++)
a[i]=b[j];
}
int main()
{
scanf("%d%d%d",&n,&r,&q);
for(int i=1;i<=n*2;i++)
{
read(a[i].s);
a[i].id=i;
}
for(int i=1;i<=n+n;i++)
{
read(a[i].w);
}
sort(a+1,a+1+n+n,cmp);
while(r>0)
{
for(int i=1;i<=n*2;i+=2)
{
if(a[i].w>a[i+1].w)
a[i].s++;
else
a[i+1].s++;
}
r--;
guibing(1,n+n);
}
printf("%d",a[q].id);
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...