Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8.
Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
#include <iostream> #include <algorithm> using namespace std; long long tab[1000007]; long long poz[1000007]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); long long n; cin>>n; for (long long i = 0; i < n; i++) { cin>>tab[i]; poz[tab[i]] = i; } long long spos = 0; long long lw = poz[n]; long long pw = poz[n]; for (long long i = n; i > 0; i--) { lw = min(lw, poz[i]); pw = max(pw, poz[i]); //cout<<i<<": lw = "<<lw<<" pw = "<<pw<<endl; if (pw - lw + 1 <= 2 * (n - i) && 2 * (n - i) <= n) { // przed�u�anie do parzystego //cout<<"parzyste:\n"; long long d1 = min(lw, n - 1 - pw); long long d2 = max(lw, n - 1 - pw); long long dodobrania = (2 * (n - i)) - (pw - lw + 1); //cout<<"dodobrania = "<<dodobrania<<" d1 = "<<d1<<" d2 = "<<d2<<endl; long long ile = min(d1, dodobrania) - max(dodobrania - d2, (long long)(0)) + 1; //cout<<"przedluzam do "<<2 * (n - i)<<" na "<<ile<<" sposobow\n"; spos += ile; } if (pw - lw + 1 <= 2 * (n - i) + 1 && 2 * (n - i) + 1 <= n) { //cout<<"nieparzyste:\n"; long long d1 = min(lw, n - 1 - pw); long long d2 = max(lw, n - 1 - pw); long long dodobrania = (2 * (n - i) + 1) - (pw - lw + 1); //cout<<"dodobrania = "<<dodobrania<<" d1 = "<<d1<<" d2 = "<<d2<<endl; long long ile = min(d1, dodobrania) - max(dodobrania - d2, (long long)(0)) + 1; //cout<<"przedluzam do "<<2 * (n - i) + 1<<" na "<<ile<<" sposobow \n"; spos += ile; } } cout<<(2 * n + 1)<<" "<<spos<<"\n"; }
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 | #include <iostream> #include <algorithm> using namespace std; long long tab[1000007]; long long poz[1000007]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); long long n; cin>>n; for (long long i = 0; i < n; i++) { cin>>tab[i]; poz[tab[i]] = i; } long long spos = 0; long long lw = poz[n]; long long pw = poz[n]; for (long long i = n; i > 0; i--) { lw = min(lw, poz[i]); pw = max(pw, poz[i]); //cout<<i<<": lw = "<<lw<<" pw = "<<pw<<endl; if (pw - lw + 1 <= 2 * (n - i) && 2 * (n - i) <= n) { // przed�u�anie do parzystego //cout<<"parzyste:\n"; long long d1 = min(lw, n - 1 - pw); long long d2 = max(lw, n - 1 - pw); long long dodobrania = (2 * (n - i)) - (pw - lw + 1); //cout<<"dodobrania = "<<dodobrania<<" d1 = "<<d1<<" d2 = "<<d2<<endl; long long ile = min(d1, dodobrania) - max(dodobrania - d2, (long long)(0)) + 1; //cout<<"przedluzam do "<<2 * (n - i)<<" na "<<ile<<" sposobow\n"; spos += ile; } if (pw - lw + 1 <= 2 * (n - i) + 1 && 2 * (n - i) + 1 <= n) { //cout<<"nieparzyste:\n"; long long d1 = min(lw, n - 1 - pw); long long d2 = max(lw, n - 1 - pw); long long dodobrania = (2 * (n - i) + 1) - (pw - lw + 1); //cout<<"dodobrania = "<<dodobrania<<" d1 = "<<d1<<" d2 = "<<d2<<endl; long long ile = min(d1, dodobrania) - max(dodobrania - d2, (long long)(0)) + 1; //cout<<"przedluzam do "<<2 * (n - i) + 1<<" na "<<ile<<" sposobow \n"; spos += ile; } } cout<<(2 * n + 1)<<" "<<spos<<"\n"; } |