#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; } |