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