线段树TLE
查看原帖
线段树TLE
664236
Pursuewind楼主2023/1/15 21:33

#1 AC; #2、3、4、5 TLE

#include <bits/stdc++.h>
using namespace std;
vector <int> ans;
const int N = 1e5 + 5;
struct node
{
	int l, r, value, pos;
} tr[N << 2];
int n;
int a[N], cnt;
void build(int root, int l, int r)
{
	tr[root].l = l, tr[root].r = r;
	if (l == r)
	{
		tr[root].value = a[l];
		tr[root].pos = l;
		return ;
	}
	int mid = (l + r) >> 1;
	build(root << 1, l, mid);
	build(root << 1 | 1, mid + 1, r);
	if (tr[root << 1].value < tr[root << 1 | 1].value)
	{
		tr[root].value = tr[root << 1].value;
		tr[root].pos = tr[root << 1].pos;
	}
	else
	{
		tr[root].value = tr[root << 1 | 1].value;
		tr[root].pos = tr[root << 1 | 1].pos;
	}
	if (root == 1)
	{
		ans.push_back(tr[1].value);
		a[tr[1].pos] = 1e9;
	}
}
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i ++)
		cin >> a[i];
	for (int i = 1; i <= n; i ++)
		build(1, 1, n);
	for (int i = 0; i < ans.size(); i ++)
		cout << ans[i] << " ";
	return 0;
}
2023/1/15 21:33
加载中...