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