A两个,7、9TLE,其余wa,求调
  • 板块P1484 种树
  • 楼主aqua__
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/3/1 19:32
  • 上次更新2024/3/1 21:12:47
查看原帖
A两个,7、9TLE,其余wa,求调
1086963
aqua__楼主2024/3/1 19:32
#include<iostream>
#include<algorithm>
#include<string.h>
#include<climits>

using namespace std;

const int  N = 300030;

long long int h[N],ph[N],hp[N],idx[N],Size,m;

void heap_swap(int a,int b){
	swap(h[a],h[b]);
	swap(ph[hp[a]],ph[hp[b]]);
	swap(hp[a],hp[b]);
	
}

void down(int u){
	int t = u;
	if(u * 2 <= Size && h[u * 2] > h[u]) t = u * 2;
	if(u * 2 + 1  <= Size && h[u * 2 + 1] > h[u]) t = u * 2 + 1;
	if(u != t){
		heap_swap(u,t);
		down(t);
	}
}

void up(int u){
	while(u / 2 && h[u / 2] < h[u]){
		heap_swap(u / 2,u);
		u >>= 1;
	}
}

int main(){
	int n,k;
	int j;
	int flag = 0;
	memset(idx,-300030,sizeof idx);
	cin >> n >> k;
	while(n -- ){
		Size ++ ;
		m ++ ;
		ph[m] = Size;hp[Size] = m;
		cin >> h[Size];
		up(Size);
	}
	int ans = 0;
	while(k -- && h[1] > 0){
		for(int i = 0;i <= j;i ++ ) {
			if(((hp[1] - idx[i]) == 1) || ((idx[i] - hp[1]) == 1)) {
				heap_swap(1,Size -- );
				down(1);
				flag = 1;
				k ++ ;
				break;
			}	
		}
		if(!flag){
			idx[j ++ ] = hp[1];
			ans += h[1];
			heap_swap(1,Size --);
			down(1);
		}
		flag = 0; 
	}
	cout << ans;	
	return 0;
}
2024/3/1 19:32
加载中...