#include<iostream>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
struct mem
{
int s;
int p;
int k;
};
mem a[200000];
void mergesort(mem *a,int l,int n)
{
if (l == n) return;
int mid = (n + l) / 2;
mergesort(a, l, mid);
mergesort(a, mid + 1, n);
int i = l, j = mid + 1;
mem* t = new mem[n+1];
int k = 0;
while (i <= mid && j <= n)
{
if (a[i].s < a[j].s)
{
t[k++] = a[j++];
}
else if (a[i].s > a[j].s)
{
t[k++] = a[i++];
}
else
{
if (a[i].p < a[j].p)
{
t[k++] = a[i++];
}
else t[k++] = a[j++];
}
}
while (i <= mid)
{
t[k++] = a[i++];
}
while (j <= n) t[k++] = a[j++];
k = 0;
for (int i = l; i <= n;i++)
{
a[i] = t[k];
k++;
}
delete[]t;
return;
}
int main()
{
int n, r, q;
cin >> n >> r >> q;
for (int i = 0; i < 2*n; i++)
{
cin >> a[i].s;
a[i].p = i;
}
for (int i = 0; i < 2 * n; i++)
{
cin >> a[i].k;
}
mergesort(a, 0, 2*n-1);
for (int i = 0; i < r; i++)
{
for (int i = 0; i < 2*n-1; i+=2)
{
if (a[i].k < a[i + 1].k) a[i+1].s++;
else a[i].s++;
}
mergesort(a, 0, 2 * n - 1);
}
cout << a[q + 1].p;
return 0;
}
我知道我的代码会超时,但是答案也错了,我不知道问题处在哪,望解答!
能把问题再说的具体一点吗