Files
DataStructureAndAlgorithm/2023203/main.cpp
unlockable 4726deb30c AC!
2023-10-22 13:25:02 +08:00

48 lines
1.1 KiB
C++

#include <stdio.h>
// 创建一个栈,拿到一个数,与栈顶比较,如果比栈顶小,压栈(正在波峰向波谷下降)
// 比栈顶大
struct NumberNode {
int data;
int count;
};
long long totalPairs;
NumberNode powers[500010];
int main() {
int len = 1;
int N;
int input;
totalPairs = 0;
powers[0].data = 0;
powers[0].count = 0;
scanf("%d", &N);
scanf("%d", &powers[1].data);
powers[1].count = 1;
N--;
for (int i = 0; i < N; i++) {
scanf("%d", &input);
while (len != 0 && powers[len].data < input) {
totalPairs += powers[len].count;
len--;
}
if (len == 0 ) {
powers[1].data = input;
powers[1].count = 1;
len = 1;
} else {
if (powers[len].data == input) {
totalPairs += powers[len].count + (len > 1);
powers[len].count++;
}
else {
totalPairs += 1;
powers[++len] = NumberNode {input, 1};
}
}
}
printf("%lld", totalPairs);
return 0;
}