用了归并,依然TLE的菜鸡求助
查看原帖
用了归并,依然TLE的菜鸡求助
334210
Angel_zou楼主2020/7/15 17:20
#include <bits/stdc++.h>
#define _for(i, a, b) for (int i = (a); i < (b); ++i)
#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define ll long long
using namespace std;
const int maxn = 200001;
int temp[maxn];
int a[maxn], s[maxn], w[maxn];

void mergeSort(int *q, int l, int r, bool (*cmp)(int x, int y))
{
    if (l >= r)
        return;

    int mid = l + r >> 1;
    mergeSort(q, l, mid, cmp);
    mergeSort(q, mid + 1, r, cmp);
    int i = l, j = mid + 1, k = 0;
    //int *temp = new int[r - l + 1];
    while (i <= mid && j <= r)
    {
        if (cmp(q[i], q[j]))
            temp[k++] = q[i++];
        else
            temp[k++] = q[j++];
    }

    while (i <= mid)
        temp[k++] = q[i++];
    while (j <= r)
        temp[k++] = q[j++];
    for (i = l, j = 0; i <= r; i++, j++)
    {
        q[i] = temp[j];
    }
}

bool cmp(int x, int y){
    if(s[x] == s[y]){
        return x<y;
    }else
    {
        return s[x] > s[y];
    }
    
}

int main()
{
    ios::sync_with_stdio(0); //解决c++输入输出流被卡问题
    ll N, R, Q;
    cin >> N >> R >> Q;
    _rep(i, 1, 2 * N) a[i] = i;
    _rep(i, 1, 2 * N) cin >> s[i];
    _rep(i, 1, 2 * N) cin >> w[i];

    _rep(_,1,R){
        mergeSort(a,1,2*N,cmp);

        for (int i = 1; i < 2*N;)
        {
            if(w[a[i]] > w[a[i+1]]){
                s[a[i]]++;
            }else
            {
                s[a[i+1]]++;
            }
            
            i+=2;
        }
    }
    mergeSort(a,1,2*N,cmp);
    cout << a[Q] << endl;
    return 0;
}

求大佬帮忙看看。。。。

2020/7/15 17:20
加载中...