#include<bits/stdc++.h> #define pb push_back using namespace std; typedef long long ll; ll wyn(int mn,int mx,int dl,int n) { int rimn=max(dl,mx),rimx=min(n,mn+dl-1); return rimx-rimn+1; } int main() { int n; scanf("%d",&n); vector<int> v(n+1),gdz(n+1); for(int i=1;i<=n;++i) { scanf("%d",&v[i]); gdz[v[i]]=i; } int mx=-1,mn=n+1; ll wy=0; for(int dl=1;dl<=n;++dl) { int mindl=n-(dl/2); mx=max(mx,gdz[mindl]); mn=min(mn,gdz[mindl]); if(mx-mn+1>dl) continue; wy+=wyn(mn,mx,dl,n); // printf("%d %lld ",dl,wy); // printf(" %d %d\n",mn,mx); } printf("%d %lld\n",2*n+1,wy); }
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 | #include<bits/stdc++.h> #define pb push_back using namespace std; typedef long long ll; ll wyn(int mn,int mx,int dl,int n) { int rimn=max(dl,mx),rimx=min(n,mn+dl-1); return rimx-rimn+1; } int main() { int n; scanf("%d",&n); vector<int> v(n+1),gdz(n+1); for(int i=1;i<=n;++i) { scanf("%d",&v[i]); gdz[v[i]]=i; } int mx=-1,mn=n+1; ll wy=0; for(int dl=1;dl<=n;++dl) { int mindl=n-(dl/2); mx=max(mx,gdz[mindl]); mn=min(mn,gdz[mindl]); if(mx-mn+1>dl) continue; wy+=wyn(mn,mx,dl,n); // printf("%d %lld ",dl,wy); // printf(" %d %d\n",mn,mx); } printf("%d %lld\n",2*n+1,wy); } |