#include #include #include using namespace std; struct Bridge{ uint64_t temp_maxlen = 0; uint32_t start = 0; uint32_t end = 0; uint32_t numberToBeLookedAt = 0; }; int main() { uint32_t N; scanf("%d", &N); //key == height, secondary == length map> bridges; vector numbers; uint64_t maxlen = 0; for(size_t i = 0; i < N; i++){ uint32_t number; scanf("%d", &number); //WRONG READ TYPE AAA bridges[number].push_back(i); //save the index of the value numbers.push_back(number); } auto it = bridges.rbegin(); for(; it != bridges.rend(); it++){ vector bbb; //finding bridges for(size_t i = 1; i < it->second.size(); i++){ if(it->second[i] - it->second[i-1]-1 >= 0){ bbb.push_back({it->second[i] - it->second[i-1]-1, it->second[i-1], it->second[i], it->first}); } } for(size_t b = 0; b < bbb.size(); b++){ for(size_t i = bbb[b].start+1; i < bbb[b].end; i++){ if(numbers[i] > it->first){ bbb[b].temp_maxlen = 0; break; } //if(b+1 < bbb.size()) } maxlen += bbb[b].temp_maxlen; } } printf("%lu\n", maxlen); return 0; }