Pagini recente » Cod sursa (job #2547260) | Cod sursa (job #1085496) | Cod sursa (job #1641041) | Cod sursa (job #2209350) | Cod sursa (job #1023456)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <queue>
#include <vector>
using namespace std;
typedef struct element{
int value;
int left;
int right;
int index;
} ELEMENT;
struct cmmp{
bool operator() (const ELEMENT &el1, const ELEMENT &el2){
return el1.value < el2.value;
}
};
ELEMENT a[502];
int main()
{
freopen("podm.in", "r", stdin);
freopen("podm.out", "w", stdout);
int n;
scanf("%d", &n);
n++;
int firstNumber;
scanf("%d", &firstNumber);
priority_queue<ELEMENT, vector<ELEMENT>, cmmp> q;
for (int i=1; i<(n-1); i++){
ELEMENT e;
scanf("%d", &e.value);
e.left = i-1;
e.right = i+1;
e.index = i;
a[i] = e;
q.push(e);
}
ELEMENT firstElement;
firstElement.index = 0;
firstElement.value = firstNumber;
firstElement.left =-1;
firstElement.right = 1;
a[0] = firstElement;
int lastNumber;
scanf("%d", &lastNumber);
ELEMENT lastElement;
lastElement.index = n;
lastElement.value = lastNumber;
lastElement.left =n-1;
lastElement.right = -1;
a[n-1] = lastElement;
long long solution = 0;
while (q.size() > 1){
ELEMENT e = q.top();
q.pop();
ELEMENT updatedElement = a[e.index];
solution += a[updatedElement.left].value * updatedElement.value * a[updatedElement.right].value;
a[updatedElement.left].right = a[updatedElement.right].index;
a[updatedElement.right].left = a[updatedElement.left].index;
}
solution += firstNumber * a[q.top().index].value * lastNumber;
printf("%lld", solution);
return 0;
}