快排o2优化后只得了两个点,其他wa掉是怎么回事
查看原帖
快排o2优化后只得了两个点,其他wa掉是怎么回事
50983
Elaina_7楼主2020/8/31 11:36

RT

程序如下

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
	int ans = 0;
	char last = ' ', ch = getchar();
	while (ch<'0' || ch>'9') last = ch, ch = getchar();
	while (ch >= '0' && ch <= '9')ans = ans * 10 + ch - '0', ch = getchar();
	if (last == '-')ans = -ans;
	return ans;
}
struct player
{
	int feng, xuhao, nengli;
};
player a[1000000];
int n, k, q, t, R;
void kp(int l, int r)
{
	int i, j;
	player mid, rq;
	i = l, j = r;
	mid.feng = a[(l + r) / 2].feng, mid.xuhao = a[(l + r) / 2].xuhao;
	do
	{
		while(a[i].feng > mid.feng || ((a[i].feng == mid.feng) && (a[i].xuhao < a[i].xuhao))) i ++;
		while(a[j].feng < mid.feng || ((a[j].feng == mid.feng) && (a[j].xuhao < a[j].xuhao))) j --;
		if(i <= j)
		{
			rq.feng = a[i].feng; a[i].feng = a[j].feng; a[j].feng = rq.feng;
			rq.xuhao = a[i].xuhao; a[i].xuhao = a[j].xuhao; a[j].xuhao = rq.xuhao;
			rq.nengli = a[i].nengli; a[i].nengli = a[j].nengli; a[j].nengli = rq.nengli;
			i ++; j --;
		}
	}while(i <= j);
	if(l < j) kp(l, j);
	if(i < r) kp(i, r);
} 
int main()
{
	n = read(); R = read(); q = read();
	for(int i = 1; i <= 2 * n; i ++)
	{
		a[i].feng = read();
		a[i].xuhao = i;
	}
	for(int j = 1; j <= n * 2; j ++)
	 a[j].nengli = read();
	kp(1, 2 * n);
	for(int j = 1; j <= R; j ++)
	{
		for(int i = 1; i <= 2 * n; i +=2)
	    {
		    if(a[i].nengli > a[i+1].nengli) a[i].feng ++;
		    else a[i + 1].feng ++;
	    }
	    kp(1, 2 * n);
	}
	cout << a[q].xuhao;
	return 0;
}
2020/8/31 11:36
加载中...