求助求助,为什么最后一个#RE
查看原帖
求助求助,为什么最后一个#RE
478000
Mnzke楼主2021/8/5 14:42
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<math.h>
#include<map>
#include<sstream>

#define STD using namespace std;
#define ll long long
#define db double
#define ldb long double
#define IOS std::ios::sync_with_stdio(false),std::cin.tie(0),std::cout.tie(0);
#define MAX 88888888
#define INF 0x3f
#define r0 return 0;
#define SYP system("pause");
#define endl '\n';

STD;

struct Node {
	int l, r, sum, lazy, max;
	Node() { l = r = sum = lazy =max= 0; }
}a[(1 << 7) + 7];
int num[(1 << 7) + 7];
inline void update(int k) {
	a[k].sum = a[k << 1].sum + a[k << 1 | 1].sum;
	a[k].max = (num[a[k << 1].max] > num[a[k << 1 | 1].max]) ? a[k << 1].max : a[k << 1 | 1].max;
}
void build(int k,int l,int r) {
	a[k].l = l; a[k].r = r;
	if (l==r)
	{
		a[k].sum = num[l];
		a[k].max = l;
		return;
	}
	int mid = (l + r) >> 1;
	build(k << 1, l, mid);
	build(k << 1 | 1, mid + 1, r);
	update(k);
}
int main() {
	int n;
	cin >> n;
	for (int i = 1; i <= (1 << n); i++)
	{
		cin >> num[i];
	}
	build(1, 1, 1 << n);
	if (a[2].max == a[1].max)
	{
		cout << a[3].max << endl;
	}
	else
	{
		cout << a[2].max << endl;
	}

}
2021/8/5 14:42
加载中...