#include <bits/stdc++.h>
using namespace std;
int main()
{
int n; cin >> n;
vector<int> v(n);
for(int i=0; i<n; ++i) cin >> v[i];
if(n==1)
{
cout << "3 1" << endl;
return 0;
}
//for(int i=0; i<n; ++i) cout << v[i] << " "; cout << endl;
vector<int> poz(n+1);
for(int i=0; i<n; ++i) poz[v[i]]=i;
//for(int i=1; i<=n; ++i) cout << poz[i] << " "; cout << endl;
int mini = poz[n];
int maxi = poz[n];
int niep = 1;
int rozm = 1;
int pust = 0;
int res = 1; // 'n'
int can = 0; // tyle moze byc pustych
set<pair<int,int>> s;
s.insert(make_pair(mini,maxi));
int n_low = (n%2==0? n/2: n/2+1);
for(int i=n-1; i>=n_low; --i)
{
//cout << i << ": ";
mini = min(mini, poz[i]);
maxi = max(maxi, poz[i]);
rozm = maxi - mini + 1;
niep++;
pust = rozm - niep;
//cout << "mini=" << mini << " maxi=" << maxi << " rozm=" << rozm << " niep=" << niep << " pust=" << pust << endl;
++can;
//cout << " can =" << can << endl;
for(int j=0; j<=can-pust; ++j)
{
for(int k=0; k<=j; ++k)
{
int i1 = mini - j + k;
if(i1<0) continue;
int i2 = maxi + k;
if(i2>n-1) break;
//cout << i1 << " - " << i2 << endl;
s.insert(make_pair(i1, i2));
}
}
}
// for(auto x:s)
// {
// for(int i=x.first; i<=x.second; ++i)
// cout << v[i] << " ";
// cout << endl;
// }
cout << 2*n+1 << " " << s.size() << endl;
}
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 58 59 60 61 62 63 64 65 66 67 68 69 | #include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<int> v(n); for(int i=0; i<n; ++i) cin >> v[i]; if(n==1) { cout << "3 1" << endl; return 0; } //for(int i=0; i<n; ++i) cout << v[i] << " "; cout << endl; vector<int> poz(n+1); for(int i=0; i<n; ++i) poz[v[i]]=i; //for(int i=1; i<=n; ++i) cout << poz[i] << " "; cout << endl; int mini = poz[n]; int maxi = poz[n]; int niep = 1; int rozm = 1; int pust = 0; int res = 1; // 'n' int can = 0; // tyle moze byc pustych set<pair<int,int>> s; s.insert(make_pair(mini,maxi)); int n_low = (n%2==0? n/2: n/2+1); for(int i=n-1; i>=n_low; --i) { //cout << i << ": "; mini = min(mini, poz[i]); maxi = max(maxi, poz[i]); rozm = maxi - mini + 1; niep++; pust = rozm - niep; //cout << "mini=" << mini << " maxi=" << maxi << " rozm=" << rozm << " niep=" << niep << " pust=" << pust << endl; ++can; //cout << " can =" << can << endl; for(int j=0; j<=can-pust; ++j) { for(int k=0; k<=j; ++k) { int i1 = mini - j + k; if(i1<0) continue; int i2 = maxi + k; if(i2>n-1) break; //cout << i1 << " - " << i2 << endl; s.insert(make_pair(i1, i2)); } } } // for(auto x:s) // { // for(int i=x.first; i<=x.second; ++i) // cout << v[i] << " "; // cout << endl; // } cout << 2*n+1 << " " << s.size() << endl; } |
English