#include <iostream> #include <algorithm> using namespace std; int main() { int ilosc; int sumka = 1; int poczatek = 0; cin >> ilosc; int tab[ilosc]; int kolejnosc[ilosc]; int ile_waznych = 1; for (int i =0; i < ilosc; i++) { cin >> tab[i]; kolejnosc[tab[i]-1] = i; } int dlugosc_przedzialu = 1; int lewa_granica ; int prawa_granica; int wlasciwa_granica; int wskaznik1 = kolejnosc[ilosc-1]; int wskaznik2 = kolejnosc[ilosc-1]; int suwak = ilosc-1; for (int i = 1; i < ilosc; i++) { if(i%2==1) { ile_waznych +=1; suwak -=1; if (wskaznik2 < kolejnosc[suwak]) { wskaznik2 = kolejnosc[suwak]; } else if (wskaznik1 > kolejnosc[suwak]) { wskaznik1 = kolejnosc[suwak]; } dlugosc_przedzialu = wskaznik2-wskaznik1+1; lewa_granica =wskaznik1+1; prawa_granica = ilosc-wskaznik2; } if(lewa_granica>ilosc-i) { lewa_granica = ilosc - i ; } if(prawa_granica>ilosc-i) { prawa_granica = ilosc - i ; } wlasciwa_granica = min(lewa_granica,prawa_granica); int przedzial = 2*(i+1-dlugosc_przedzialu); if(przedzial > 0) { sumka += min(wlasciwa_granica,przedzial); } else if(przedzial==0) { sumka +=1; } } cout << 2*ilosc+1 << " " << sumka; 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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include <iostream> #include <algorithm> using namespace std; int main() { int ilosc; int sumka = 1; int poczatek = 0; cin >> ilosc; int tab[ilosc]; int kolejnosc[ilosc]; int ile_waznych = 1; for (int i =0; i < ilosc; i++) { cin >> tab[i]; kolejnosc[tab[i]-1] = i; } int dlugosc_przedzialu = 1; int lewa_granica ; int prawa_granica; int wlasciwa_granica; int wskaznik1 = kolejnosc[ilosc-1]; int wskaznik2 = kolejnosc[ilosc-1]; int suwak = ilosc-1; for (int i = 1; i < ilosc; i++) { if(i%2==1) { ile_waznych +=1; suwak -=1; if (wskaznik2 < kolejnosc[suwak]) { wskaznik2 = kolejnosc[suwak]; } else if (wskaznik1 > kolejnosc[suwak]) { wskaznik1 = kolejnosc[suwak]; } dlugosc_przedzialu = wskaznik2-wskaznik1+1; lewa_granica =wskaznik1+1; prawa_granica = ilosc-wskaznik2; } if(lewa_granica>ilosc-i) { lewa_granica = ilosc - i ; } if(prawa_granica>ilosc-i) { prawa_granica = ilosc - i ; } wlasciwa_granica = min(lewa_granica,prawa_granica); int przedzial = 2*(i+1-dlugosc_przedzialu); if(przedzial > 0) { sumka += min(wlasciwa_granica,przedzial); } else if(przedzial==0) { sumka +=1; } } cout << 2*ilosc+1 << " " << sumka; return 0; } |