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