/* 2021
* Maciej Szeptuch
*/
#include <algorithm>
#include <cstdio>
int scores;
int score;
int position[1048576];
long long int count;
int start;
int end;
int main(void)
{
scanf("%d", &scores);
for(int s = 0; s < scores; ++s)
{
scanf("%d", &score);
position[score] = s + 1;
}
start = position[scores];
end = position[scores];
for(int len = 1; len <= scores; ++len)
{
score = scores - len / 2;
start = std::min(start, position[score]);
end = std::max(end, position[score]);
if(end - start + 1 > len)
continue;
int wiggle = len - end + start - 1;
count += 1 + std::min(std::min(start - 1, scores - len), std::min(scores - end, wiggle));
}
printf("%d %lld\n", 2 * scores + 1, count);
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | /* 2021 * Maciej Szeptuch */ #include <algorithm> #include <cstdio> int scores; int score; int position[1048576]; long long int count; int start; int end; int main(void) { scanf("%d", &scores); for(int s = 0; s < scores; ++s) { scanf("%d", &score); position[score] = s + 1; } start = position[scores]; end = position[scores]; for(int len = 1; len <= scores; ++len) { score = scores - len / 2; start = std::min(start, position[score]); end = std::max(end, position[score]); if(end - start + 1 > len) continue; int wiggle = len - end + start - 1; count += 1 + std::min(std::min(start - 1, scores - len), std::min(scores - end, wiggle)); } printf("%d %lld\n", 2 * scores + 1, count); return 0; } |
English