#include<iostream>
using namespace std;
int t[1000010];
int poz[1000010];
bool kt[1000010];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,l,r,dl=1,ek,od; ///ek = konieczy element
long long wyn=1;
cin>>n;
for(int i=1;i<=n;i++){
cin>>t[i];
poz[t[i]]=i;
}
r=poz[n];
l=poz[n];
ek=n;
kt[poz[n]]=1;
od=n;
while(dl<n){
dl++;
ek=n-dl/2;
while(od>ek){
//dl--;
if(poz[od-1]<l){
for(int i=l-1;i>=poz[od-1];i--){
//dl++;
kt[i]=1;
}
l=poz[od-1];
}
else{
for(int i=r+1;i<=poz[od-1];i++){
//dl++;
kt[i]=1;
}
r=poz[od-1];
}
while(kt[poz[od-1]]==1){
od--;
}
dl=max(dl,r-l+1);
ek=n-dl/2;
}
//else dl++;
if(l-1<=n-r){
wyn+=min(min(n-dl,l-1),dl-(r-l+1))+1;
}
else wyn+=min(min(n-dl,n-r),dl-(r-l+1))+1;
//if(dl-(r-l+1)==l-1+n-r)wyn++;
//else wyn+=min(min(l-1,n-r),dl-(r-l+1))+1;
//cout<<l<<' '<<r<<' '<<dl<<' '<<wyn<<'\n';
}
cout<<2*n+1<<' '<<wyn;
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 58 | #include<iostream> using namespace std; int t[1000010]; int poz[1000010]; bool kt[1000010]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,l,r,dl=1,ek,od; ///ek = konieczy element long long wyn=1; cin>>n; for(int i=1;i<=n;i++){ cin>>t[i]; poz[t[i]]=i; } r=poz[n]; l=poz[n]; ek=n; kt[poz[n]]=1; od=n; while(dl<n){ dl++; ek=n-dl/2; while(od>ek){ //dl--; if(poz[od-1]<l){ for(int i=l-1;i>=poz[od-1];i--){ //dl++; kt[i]=1; } l=poz[od-1]; } else{ for(int i=r+1;i<=poz[od-1];i++){ //dl++; kt[i]=1; } r=poz[od-1]; } while(kt[poz[od-1]]==1){ od--; } dl=max(dl,r-l+1); ek=n-dl/2; } //else dl++; if(l-1<=n-r){ wyn+=min(min(n-dl,l-1),dl-(r-l+1))+1; } else wyn+=min(min(n-dl,n-r),dl-(r-l+1))+1; //if(dl-(r-l+1)==l-1+n-r)wyn++; //else wyn+=min(min(l-1,n-r),dl-(r-l+1))+1; //cout<<l<<' '<<r<<' '<<dl<<' '<<wyn<<'\n'; } cout<<2*n+1<<' '<<wyn; return 0; } |
English