#include #include #include using namespace std; struct Bridge{ uint32_t temp_maxlen = 0; uint32_t start = 0; uint32_t end = 0; uint32_t numberToBeLookedAt = 0; }; int main() { int N; scanf("%d", &N); //key == height, secondary == length map> bridges; vector numbers; uint32_t maxlen = 0; for(int i = 0; i < N; i++){ unsigned int 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;} } maxlen += bbb[b].temp_maxlen; } } printf("%d\n", maxlen); return 0; }