https://www.acmicpc.net/problem/14009
<aside> 💡
케이스를 아래와 같이 분류하며 길이를 최대한 늘려나가면 된다.
#include <bits/stdc++.h>
#define FASTIO ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
using namespace std;
typedef long long ll;
int n;
int a[200'001];
ll ans = 0;
int state = 0;
int prv;
signed main()
{
FASTIO;
cin >> n;
for(int i = 0; i<n; i++) cin >> a[i];
if(n == 1){
cout << 1;
return 0;
}
prv = a[0];
int sidx = 0;
for(int i = 0; i<n; i++){
if(prv == a[i]){
ans += 1LL*(i-sidx)*(i-sidx+1)/2;
sidx = i;
state = 0;
// cout << 0 <<":" << i <<", "<< ans<<"\\n";
}
else if(state == 0){
if(prv<a[i]) state = 1;
else state = -1;
}
else if(state == 1){
if(prv<a[i]){
ans += 1LL*(i-sidx)*(i-sidx+1)/2-1;
sidx = i-1;
state = 1;
// cout << 1 <<":" << i <<", "<< ans<<"\\n";
}
else state = -1;
}
else if(state == -1){
if(prv>a[i]){
ans += 1LL*(i-sidx)*(i-sidx+1)/2-1;
sidx = i-1;
state = -1;
// cout << -1 <<":" << i <<", "<< ans<<"\\n";
}
else state = 1;
}
prv = a[i];
}
ans += 1LL*(n-sidx)*(n-sidx+1)/2;
cout << ans;
return 0;
}