#include<bits/stdc++.h> using namespace std; int a[1000006]; int poz[1000006]; int cl(int a) { if(a%2==0) return a/2+1; else return a/2+2; } int main() { long long wyn=0; int n; scanf("%d", &n); for(int i=1; i<=n; ++i){ scanf("%d", &a[i]); poz[a[i]]=i; } int minp=poz[n], maxp=poz[n]; for(int i=n; i>=n/2+1; --i){ int o=1+2*(n-i); minp=min(minp, poz[i]); maxp=max(maxp, poz[i]); int p=maxp-minp+1; if(p>o) continue; if(p==o) ++wyn; if(p<o){ int k=o-p; int x=min(minp-1, k)+1, y=min(n-maxp, k)+1; wyn+=(x+y-(k+1)); } } int minp1=poz[n], maxp1=poz[n]; for(int i=n; i>=cl(n); --i){ int o=2+2*(n-i); minp1=min(minp1, poz[i-1]); maxp1=max(maxp1, poz[i-1]); int p=maxp1-minp1+1; if(p>o) continue; if(p==o) ++wyn; if(p<o){ int k=o-p; int x=min(minp1-1, k)+1, y=min(n-maxp1, k)+1; wyn+=(x+y-(k+1)); } } printf("%d %lld\n", 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 | #include<bits/stdc++.h> using namespace std; int a[1000006]; int poz[1000006]; int cl(int a) { if(a%2==0) return a/2+1; else return a/2+2; } int main() { long long wyn=0; int n; scanf("%d", &n); for(int i=1; i<=n; ++i){ scanf("%d", &a[i]); poz[a[i]]=i; } int minp=poz[n], maxp=poz[n]; for(int i=n; i>=n/2+1; --i){ int o=1+2*(n-i); minp=min(minp, poz[i]); maxp=max(maxp, poz[i]); int p=maxp-minp+1; if(p>o) continue; if(p==o) ++wyn; if(p<o){ int k=o-p; int x=min(minp-1, k)+1, y=min(n-maxp, k)+1; wyn+=(x+y-(k+1)); } } int minp1=poz[n], maxp1=poz[n]; for(int i=n; i>=cl(n); --i){ int o=2+2*(n-i); minp1=min(minp1, poz[i-1]); maxp1=max(maxp1, poz[i-1]); int p=maxp1-minp1+1; if(p>o) continue; if(p==o) ++wyn; if(p<o){ int k=o-p; int x=min(minp1-1, k)+1, y=min(n-maxp1, k)+1; wyn+=(x+y-(k+1)); } } printf("%d %lld\n", 2*n+1, wyn); return 0; } |