#include <cstdio> #include <algorithm> #define MAKS 1000010 using namespace std; typedef long long int lld; int tab[MAKS]; int poz[MAKS]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&tab[i]); poz[tab[i]]=i; } lld wyn=0; int l=n+1; int p=0; for(int v=n;v>=1;v--) { l=min(l, poz[v]); p=max(p, poz[v]); int top=(n-v+1); int dl=2*top-1; //printf("top: %d, dl: %d\n",top,dl); if(dl>=1 && dl<=n) { int a=max(1,p-dl+1); int b=min(n,l+dl-1); wyn+=max(0LL, lld((b-a+1)-dl+1)); } dl--; if(dl>=1 && dl<=n) { int a=max(1,p-dl+1); int b=min(n,l+dl-1); wyn+=max(0LL, lld((b-a+1)-dl+1)); } } printf("%d %lld\n",2*n+1, wyn); }
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 | #include <cstdio> #include <algorithm> #define MAKS 1000010 using namespace std; typedef long long int lld; int tab[MAKS]; int poz[MAKS]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&tab[i]); poz[tab[i]]=i; } lld wyn=0; int l=n+1; int p=0; for(int v=n;v>=1;v--) { l=min(l, poz[v]); p=max(p, poz[v]); int top=(n-v+1); int dl=2*top-1; //printf("top: %d, dl: %d\n",top,dl); if(dl>=1 && dl<=n) { int a=max(1,p-dl+1); int b=min(n,l+dl-1); wyn+=max(0LL, lld((b-a+1)-dl+1)); } dl--; if(dl>=1 && dl<=n) { int a=max(1,p-dl+1); int b=min(n,l+dl-1); wyn+=max(0LL, lld((b-a+1)-dl+1)); } } printf("%d %lld\n",2*n+1, wyn); } |