为什么我使用归并后点2依然TLE,求巨佬解答
查看原帖
为什么我使用归并后点2依然TLE,求巨佬解答
1253896
ArioKings楼主2024/12/5 11:04
#include <bits/stdc++.h>
using namespace std;
struct Node {
	int no;
	int score;
	int force;
	bool operator<(const Node& n) const {
		return this->score > n.score || (this->score == n.score && this->no < n.no);
	}
};

int n,r,q;
Node p[200005];
Node nd[200005];
void Merge_Sort(int a,int b,int temp) {
	int i = a,j = temp + 1,k = a;
	while(i <= temp && j <= b) {
		if(p[i] < p[j])
			nd[k++] = p[i++];
		else
			nd[k++] = p[j++];
	}
	while(i <= temp)
		nd[k++] = p[i++];
	while(j <= b)
		nd[k++] = p[j++];
	for(int ai = a;ai <= b;ai ++)
		p[ai] = nd[ai];
}
void Merge(int a,int b) {
	if(a >= b) return;
	int temp = (a + b) / 2;
	Merge(a,temp);
	Merge(temp+1,b);
	Merge_Sort(a,b,temp);
}
int main() {
	
	cin >> n >> r >> q;
	n *= 2;
	
	for(int i = 1;i <= n;++ i) {
		scanf("%d",&p[i].score);
		p[i].no = i;
	}
	
	for(int i = 1;i <= n;++ i) {
		scanf("%d",&p[i].force);
	}
	sort(p + 1,p + 1 + n);
	for(int i = 0;i < r;++ i) {
		
		for(int i = 1;i <= n;i += 2) {
			if(p[i].force > p[i+1].force)
				p[i].score ++;
			else
				p[i+1].score ++;
		}
		Merge(1,n);
	}

	/*
	for(int i = 1;i <= n;i ++) {
		cout << p[i].no << " " << p[i].score << " " << p[i].force << endl;
	} 
	*/
	cout << p[q].no;
}
2024/12/5 11:04
加载中...