#include #include typedef struct { int value; int prev_array_num; int next_array_num; int array_num; } value_data; int desc(const void *p, const void *q); int void_check( int *, int); void void_data_insert(int *, int, int, int); int main(void){ int sushi_count = 0; int sushi_input_value_data[1001]; value_data sushi_value_data[1001]; int void_list[3001] = {0}; int void_check_n; int *p = sushi_input_value_data; size_t size; int value_sum = 0; scanf("%d", &sushi_count); for (int i = 0; i < sushi_count; i++) { scanf("%d", p); sushi_value_data[i].value = *p; sushi_value_data[i].next_array_num = i + 1+1; sushi_value_data[i].prev_array_num = i - 1+1; sushi_value_data[i].array_num = i+1; p++; } size = sizeof(sushi_value_data)/sizeof(value_data); qsort(sushi_value_data, size, sizeof(value_data), desc); for (int i = 0; i < sushi_count; i++) { void_check_n = void_check((int *)&void_list, sushi_value_data[i].array_num); if (void_check_n != 1) { value_sum += sushi_value_data[i].value; void_data_insert((int *)&void_list, sushi_value_data[i].array_num, sushi_value_data[i].next_array_num, sushi_value_data[i].prev_array_num); } } printf("%d\n", value_sum); return 0; } int desc(const void *p, const void *q) { value_data *P_data = (value_data *)p; value_data *Q_data = (value_data *)q; return Q_data->value - P_data->value; } int void_check( int *void_list, int array_num) { int i = 0; int ret = 0; int *p = void_list; while(1){ if (*p == 0) { //配列の終端 break; } if (*p == array_num) { ret = 1; } i++; p++; } return ret; } void void_data_insert(int *void_list, int array_num, int next_array_num, int prev_array_num) { int i = 0; int *p = void_list; while (1) { if (*p == 0 && *(p+1) == 0 && *(p+2) == 0 ) { *p = array_num; *(p+1) = next_array_num; *(p+2) = prev_array_num; break; } p++; i++; } }