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
42
43
44
45
46
47
48
49
#include <iostream>

enum class Kierunek { gora, dol };

bool isMini(int i) { return i == -1'000'000; }
bool isMaxi(int i) { return i ==  1'000'000; }

int wycen(int prev, int curr, bool did_pay, Kierunek kier) {
	if (kier == Kierunek::dol) {
		if(did_pay) return 0;
		return (prev <= curr) ? 1 : 0;
	}
	else { // if(kier == Kierunek::gora) {
		if(did_pay) return 0;
		return (prev >= curr) ? 1 : 0;
	}
}

int main() {
	std::ios::sync_with_stdio(false);

	int count; std::cin >> count;
	int prev;  std::cin >> prev; 
	int curr;

	int  koszt[2] = { isMaxi(prev) ? 1 : 0, isMini(prev) ? 1 : 0 };
	bool did_pay[2] = { 0 < koszt[0], 0 < koszt[1] };

	for(int i = 1; i < count; ++i) {
		std::cin >> curr;

		bool i_even = ((i % 2) == 0);

		for(int k = 0; k < 2; ++k) {
			bool k_even = ((k % 2) == 0);
			auto kier = (i_even xor k_even) ? Kierunek::gora : Kierunek::dol;

			int dk = wycen(prev, curr, did_pay[k], kier);
			koszt[k] += dk;
			did_pay[k] = (0 < dk);

		}
		prev = curr;
	}

	int wynik = std::min(koszt[0], koszt[1]);
	std::cout << wynik << "\n";
	return 0;
}