Submission
Status:
[-SSSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: Gaygun
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.002 second
Submitted On: 2026-03-07 16:07:50
#include <bits/stdc++.h>
using namespace std;
const int maxn = 30+10;
int heap[maxn];
int n;
void insertHeap(int size, int newval){
int hold = size;
int parent = size/2;
while(heap[parent] < newval){
heap[hold] = heap[parent];
hold = parent;
parent = hold/2;
}
heap[hold] = newval;
}
int deleteHeap(int size){
int maxElement = heap[1];
int lastElement = heap[size];
size = size-1;
int hold = 1;
while(hold*2 <= size){
int LeftChild = hold*2;
int RightChild = hold*2+1;
int child;
if(heap[RightChild] < heap[LeftChild]) child = LeftChild;
else child = RightChild;
// cout << LeftChild << ' ' << RightChild << ' ' << child << '\n';
if(lastElement < heap[child]) {
heap[hold] = heap[child];
hold = child;
}
else break;
}
heap[hold] = lastElement;
heap[size+1] = 0;
return maxElement;
}
int main(){
// cin.tie(nullptr)->sync_with_stdio(0);
cin >> n;
heap[0] = 2e9; // set heap[0] depend on max/min heap
vector<int> stone(n+1);
for(int i=1; i<=n; i++){
cin >> stone[i];
if(i == 1) {
heap[i] = stone[i];
continue;
}
insertHeap(i, stone[i]);
}
for(int i=1; i<=n; i++){
cout << heap[i] << ' ' ;
}
int i = n;
while(i > 1){
int x = deleteHeap(i);
int y = deleteHeap(--i);
if(x == y) {
if(i == 1){
cout << 0 << '\n';
return 0;
}
--i;
continue;
}
insertHeap(i, x-y);
}
cout << heap[1];
}
/*
11
23 15 17 13 31 10 2 4 29 14 5
*/
/*
class Solution {
public:
void insertHeap(int size, int newval, int heap[]){
int hold = size;
int parent = size/2;
while(heap[parent] < newval){
heap[hold] = heap[parent];
hold = parent;
parent = hold/2;
}
heap[hold] = newval;
}
int deleteHeap(int size, int heap[]){
int maxElement = heap[1];
int lastElement = heap[size];
size = size-1;
int hold = 1;
while(hold*2 <= size){
int LeftChild = hold*2;
int RightChild = hold*2+1;
int child;
if(heap[RightChild] < heap[LeftChild]) child = LeftChild;
else child = RightChild;
if(lastElement < heap[child]) {
heap[hold] = heap[child];
hold = child;
}
else break;
}
heap[hold] = lastElement;
heap[size+1] = 0;
return maxElement;
}
int lastStoneWeight(vector<int>& stones) {
int n = stones.size();
int heap[30+10];
heap[0] = 2e9; // set heap[0] depend on max/min heap
for(int i=1; i<=n; i++){
if(i == 1) {
heap[i] = stones[i-1];
continue;
}
insertHeap(i, stones[i-1],heap);
}
int i = n;
while(i > 1){
int x = deleteHeap(i, heap);
int y = deleteHeap(--i, heap);
if(x == y) {
if(i == 1){
return 0;
}
--i;
continue;
}
insertHeap(i, x-y, heap);
}
return heap[1];
}
};
*/