Kai’blog

主博客 | 势利纷华,近之而不染者洁,不近者亦洁,君子不立危墙之下。

P4913【黄】

这题好像可以用线段树什么的高级做法来做,但我感觉我这个简单做法不管是时间还是空间都和那些复杂的做法差不了太多。重点是很优雅,思路非常简单,而且代码很短,用OOP思想写成的代码可读性极高,不用注释估计都很清晰。

Code

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <map>
#include <vector>
using namespace std;

int intpow(int a,int b){int ans=1;for(int i=1;i<=b;i++)ans*=a;return ans;}
struct node
{
	int name,aby;
	friend bool operator<(node A,node B){return A.aby<B.aby;}
	node(){}
	node(int a,int b){name=a;aby=b;}
};
node a[500];
int n,N;
int main()
{
	cin>>n;
	N=intpow(2,n);
	for(int i=N;i<2*N;i++)
		cin>>a[i].aby,a[i].name=i-N+1;
	for(int i=N-1;i>=0;i--)
		a[i]=max(a[i*2],a[i*2+1]);
	cout<<min(a[2],a[3]).name;
    return 0;
}
posted @ 2023-10-31 16:39  Kai-G  阅读(5)  评论(0编辑  收藏  举报
Copyright © 2019-2020 拱垲. All rights reserved.