#include <bits/stdc++.h>
using namespace std;
int poz[1000*1000+6];
int oblicz_nieparzyste(int p, int n, int dlugosc, int dlugosc2){
//cout <<"np"<< p<<" "<<n<<" "<<dlugosc<<" "<<dlugosc2<<"<>";
int l=max(p-dlugosc,0);
p=min(n-2*dlugosc2-1,p);
//cout << p-l+1<<" "<< l <<" "<< p<<endl;
return p-l+1;
}
int oblicz_parzyste(int p, int n, int dlugosc, int dlugosc2){
//cout <<"p "<< p<<" "<<n<<" "<<dlugosc<<"<>";
int l=max(p-dlugosc+1,0);
p=min(n-2*dlugosc2,p);
//cout << p-l+1<<" "<< l <<" "<< p<<endl;
return p-l+1;
}
int main(){
int n;
cin >> n;
for (int i=0; i<n;i++){
int tmp;
cin >> tmp;
poz[tmp]=i;
}
cout << 2*n+1<<" ";
int l=n+1;
int p=0;
long long wynik=0;
for (int i=0;i<=n/2+1;i++){
//cout << "obecnie:"<<n-i<<endl;
l=min(poz[n-i],l);
p=max(poz[n-i],p);
if (2*i<n){
wynik += max(0,oblicz_nieparzyste(l,n,2*i-(p-l),i));
//cout << wynik<<endl;
}
if (2*i-1<n){
wynik += max(0,oblicz_parzyste(l,n,2*i-(p-l),i));
//cout << wynik<<endl;
}
}
cout << wynik<<endl;
}
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 | #include <bits/stdc++.h> using namespace std; int poz[1000*1000+6]; int oblicz_nieparzyste(int p, int n, int dlugosc, int dlugosc2){ //cout <<"np"<< p<<" "<<n<<" "<<dlugosc<<" "<<dlugosc2<<"<>"; int l=max(p-dlugosc,0); p=min(n-2*dlugosc2-1,p); //cout << p-l+1<<" "<< l <<" "<< p<<endl; return p-l+1; } int oblicz_parzyste(int p, int n, int dlugosc, int dlugosc2){ //cout <<"p "<< p<<" "<<n<<" "<<dlugosc<<"<>"; int l=max(p-dlugosc+1,0); p=min(n-2*dlugosc2,p); //cout << p-l+1<<" "<< l <<" "<< p<<endl; return p-l+1; } int main(){ int n; cin >> n; for (int i=0; i<n;i++){ int tmp; cin >> tmp; poz[tmp]=i; } cout << 2*n+1<<" "; int l=n+1; int p=0; long long wynik=0; for (int i=0;i<=n/2+1;i++){ //cout << "obecnie:"<<n-i<<endl; l=min(poz[n-i],l); p=max(poz[n-i],p); if (2*i<n){ wynik += max(0,oblicz_nieparzyste(l,n,2*i-(p-l),i)); //cout << wynik<<endl; } if (2*i-1<n){ wynik += max(0,oblicz_parzyste(l,n,2*i-(p-l),i)); //cout << wynik<<endl; } } cout << wynik<<endl; } |
English