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
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pb push_back
#define nd second
#define st first
#define mp make_pair
const int N= 1e6+7;
int poz[N];
ll n,a;
ll ile(ll dlu, ll pocz, ll kon)
{

    ll miejp=n-kon, miejl=pocz-1;
    ll wol=dlu-(kon-pocz)-1;
    if(wol<0) return 0;
    if(wol==0) return 1;
    ll zero=0;
    if(miejl<miejp)
    {
       // cout<<"wchodze dla i = "<<dlu<<" pocz to "<<pocz<<" kon to "<<kon<<" mam wiec "<<wol<< " wolnych zwracam "<<min(miejl, wol)+1- max(wol-miejp, 0)<<"\n";
        return min(miejl, wol)+1- max(wol-miejp, zero);
    }
    else
    {
       // cout<<"wchodze dla i = "<<dlu<<" pocz to "<<pocz<<" kon to "<<kon<<" mam wiec "<<wol<< " wolnych zwracam "<<min(miejp, wol)+1- max(wol-miejl, 0)<<"\n";
        return min(miejp, wol)+1- max(wol-miejl, zero);
    }
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n;

    for(int i=1;i<=n;i++)
    {
        cin>>a;
        poz[a]=i;
    }
    cout<<2*n+1<<" ";
    ll wyn=1;
    ll pocz=poz[n];
    ll kon=poz[n];
    ll ost=n-1;
    for(int i=2;i<=n;i++)
    {
        if(i%2==0)
        {
            if(poz[ost] <pocz ) pocz=poz[ost];
            if(poz[ost] >kon ) kon=poz[ost];
            ost--;
        }
        wyn+=ile(i, pocz, kon);
    }
    cout<<wyn;
}