社区讨论

30分求大佬看,大数据会卡住

P1309[NOIP 2011 普及组] 瑞士轮参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi6v3d56
此快照首次捕获于
2025/11/20 11:18
4 个月前
此快照最后确认于
2025/11/20 11:18
4 个月前
查看原帖
想知道为什么大数据输入时会卡住(就是复制时会卡住) 但换行可以继续输入 请大佬帮看看qwq
CPP
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <math.h>
using namespace std;
const int maxn=200005;
int n,r,q;
int t=0;
int s[maxn][2],w[maxn];
void qsort(int,int);
void qwq(int x,int y)
{
    if(s[x][0]==s[y][0])
        if(s[x][1]<s[y][1])
            return;
    t=s[x][0];
    s[x][0]=s[y][0];
    s[y][0]=t;
    t=s[x][1];
    s[x][1]=s[y][1];
    s[y][1]=t;
    t=w[x];
    w[x]=w[y];
    w[y]=w[x];
}
int main()
{
    scanf("%d %d %d",&n,&r,&q);
    for(int i=1;i<=2*n;i++)
    {
        scanf("%d",&s[i][0]);
        s[i][1]=i;
    }
    for(int i=1;i<=2*n;i++)
        scanf("%d",&w[i]);
    qsort(1,2*n);
    for(int i=1;i<=r;i++)
    {
        for(int j=2*n;j>=1;j-=2)
        {
            if(w[j]>w[j-1])
                s[j][0]++;	
            else
                s[j-1][0]++;
            if(s[j+1][0]>=s[j][0])
                qwq(j,j+1);	
            if(s[j][0]>=s[j-1][0])
                qwq(j-1,j);	
            
        }	
    }
     for(int i=1;i<=2*n;i++)
        if(s[i+1][0]==s[i][0])
            qwq(i,i+1);
    printf("%d",s[q][1]);

}
void qsort(int x,int y)
{
    int l=x,r=y,mid=s[(x+y)/2][0];
    while(l<=r)
    {
        while(s[l][0]>mid) l++;
        while(s[r][0]<mid) r--;
        if(l<=r)
        {
            qwq(l,r);
            l++,r--;
        }		
    } 
    if(l<y) qsort(l,y);
    if(x<r) qsort(x,r);	
}

回复

1 条回复,欢迎继续交流。

正在加载回复...