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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <list>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;

int main(int argc, char** argv) {
	
	long n, i;
	long funkcja;
	double mediana, mediana_pom;
	long poczatek, koniec, srodek_lewa, srodek_prawa, srodek;
	long ileMozliwosci=0;
	long *tab;
	cin >> n;
	tab = new long[n];
	for(i=0; i<n; i++){	
		cin >> tab[i];
		if(tab[i]==n) {
			srodek_lewa = i;
			srodek_prawa = i;
		}
	}
	funkcja = 1+2*n;
	mediana = (double)(1+n)/2 -0.1;  // 0.1 aby porownywanie <= mediany dzialalo pewnie
	
	//sprawdzanie poczatku - pokazuje na wyraz, ktory juz nie mozna usunac
	mediana_pom=mediana;
	poczatek=0;
	i=0;
	while(tab[i]<mediana_pom && i<n){
		poczatek++;
		mediana_pom+=0.5;
		i++;
	}
	//sprawdzanie konca - pokazuje na wyraz, ktory juz nie mozna usunac
	mediana_pom=mediana;
	koniec=n-1;
	i=n-1;
	while(tab[i]<mediana_pom && i>=0){
		koniec--;
		mediana_pom+=0.5;
		i--;
	}
//	cout << "srodek_prawa przed zmiana: "<<srodek_prawa <<endl;
//	cout << "sl: "<<srodek_lewa << " po: "<<poczatek << " sp: "<<srodek_prawa <<" koniec: "<<koniec<< " n: "<< n<<endl;
	if(srodek_lewa<poczatek || srodek_prawa>koniec || poczatek>=koniec){
//		cout <<"kuku\n";
//		cout << "sl: "<<srodek_lewa << " po: "<<poczatek << " sp: "<<srodek_prawa <<" koniec: "<<koniec<< " n: "<< n<<endl;
		srodek=0;
	}
	else{

		//sprawdzanie srodka prawa
		mediana_pom=mediana;
		i=srodek_prawa;
		while(tab[i]>mediana_pom && i<n){
			srodek_prawa++;
			mediana_pom+=0.5;
			i++;
//			cout <<"sp++ " << srodek_prawa<<" medpom: "<<mediana_pom<<endl;
		}
		//sprawdzenie srodka lewa	
		mediana_pom=mediana;
		i=srodek_lewa;
		while(tab[i]>mediana_pom && i>=0){
			srodek_lewa--;
			mediana_pom+=0.5;
			i--;
//			cout <<"sl-- " << srodek_lewa<<" medpom: "<<mediana_pom<<endl;
		}
//		cout << "srodek_prawa: "<<srodek_prawa << " srodek_lewa: "<< srodek_lewa<<endl;
		//srodek lewy i prawy to sa pierwsze niemozliwe
		srodek = srodek_prawa-srodek_lewa-1;
	}
	if(poczatek==n) poczatek--;
	koniec = n-koniec-1; // ile na koncu
	if(koniec==n) koniec--;

	
//	cout << "poczatek: "<< poczatek << " koniec: "<< koniec << " srodek: "<< srodek << endl;
	ileMozliwosci = (poczatek+1)*(koniec+1) ;
	if(poczatek+koniec+srodek>n)
		srodek = n-poczatek-koniec;
	
	ileMozliwosci+=srodek;
	
	if(n==1) cout << funkcja << " 1"<<endl;
	else cout << funkcja << " " << ileMozliwosci << endl;
	
	delete tab;
	return 0;
}