#include <bits/stdc++.h>
using namespace std;
int n,maxa,wyn,l,r,a;
double y;
int tab[1000005];
bool prawo[1000005];
vector<int> vec;
int outside()
{
l=0;
r=0;
for(int i = 0;i<maxa;i++)
{
if(tab[i]<y){
l++;
} else {
break;
}
}
for(int i = n;i>maxa;i--)
{
if(tab[i]<y){
r++;
} else {
break;
}
}
if(l==0){
l++;
}
if(r==0){
r++;
}
return(l*r);
}
int main() {
ios_base::sync_with_stdio(false);
cin>>n;
y=n+1;
y/=2;
wyn = 1;
cout<<2*n+1<<' ';
if(n==1){
cout<<1;
return(0);
}
for(int i = 0;i<n;i++){
cin>>tab[i];
if(tab[i]==n)
{
maxa=i;
}
if(maxa)
{
prawo[tab[i]]=true;
}
vec.push_back(tab[i]);
}
int ii = n;
int iii = 0;
while(vec.size()>1){
wyn+=outside();
vec.erase(vec.begin(),vec.begin()+l);
vec.erase(vec.end()-r,vec.end());
sort(vec.begin(),vec.end());
a=vec[0];
if(prawo[a])
{
while(vec[0]==a)
{
if(tab[ii]<a)
{
ii--;
}
else
{
vec.erase(vec.begin()+tab[ii]-a-1);
ii--;
}
}
}
else
{
while(vec[0]==a)
{
if(tab[iii]<a)
{
iii++;
}
else
{
vec.erase(vec.begin()+tab[iii]-a-1);
iii++;
}
}
}
wyn++;
if(vec.size()%2==0)
{
y=(vec[vec.size()/2+1]+vec[vec.size()/2])/2;
} else
{
y=vec[(vec.size()+1)/2];
}
}
cout<<wyn+1;
return(0);
}
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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | #include <bits/stdc++.h> using namespace std; int n,maxa,wyn,l,r,a; double y; int tab[1000005]; bool prawo[1000005]; vector<int> vec; int outside() { l=0; r=0; for(int i = 0;i<maxa;i++) { if(tab[i]<y){ l++; } else { break; } } for(int i = n;i>maxa;i--) { if(tab[i]<y){ r++; } else { break; } } if(l==0){ l++; } if(r==0){ r++; } return(l*r); } int main() { ios_base::sync_with_stdio(false); cin>>n; y=n+1; y/=2; wyn = 1; cout<<2*n+1<<' '; if(n==1){ cout<<1; return(0); } for(int i = 0;i<n;i++){ cin>>tab[i]; if(tab[i]==n) { maxa=i; } if(maxa) { prawo[tab[i]]=true; } vec.push_back(tab[i]); } int ii = n; int iii = 0; while(vec.size()>1){ wyn+=outside(); vec.erase(vec.begin(),vec.begin()+l); vec.erase(vec.end()-r,vec.end()); sort(vec.begin(),vec.end()); a=vec[0]; if(prawo[a]) { while(vec[0]==a) { if(tab[ii]<a) { ii--; } else { vec.erase(vec.begin()+tab[ii]-a-1); ii--; } } } else { while(vec[0]==a) { if(tab[iii]<a) { iii++; } else { vec.erase(vec.begin()+tab[iii]-a-1); iii++; } } } wyn++; if(vec.size()%2==0) { y=(vec[vec.size()/2+1]+vec[vec.size()/2])/2; } else { y=vec[(vec.size()+1)/2]; } } cout<<wyn+1; return(0); } |
English