#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define all(a) a.begin(),a.end()
#define v vector
#define pb push_back
#define LB lower_bound
v<int>akt;
int n;
void refill(int n){
while(akt[n] and n){
akt[n]=0;
n--;
}
}
int low(int i, int n){
if(akt[i]==n) return i;
return i-1;
}
int ind(int i){
if(i<0) return n+i;
return i;
}
int main(){ios_base::sync_with_stdio(0);cin.tie(0);
int pom=-1;
cin >> n;
akt.resize(n,0);
v<int>kor(n);
for(int i=0;i<n;i++){
cin >> kor[i];
if(kor[i]>=akt[n-1]){
pom=i;
akt[n-1]=kor[i];
}
}
int x=0;
int wyn=0;
for(int i=pom-1;x<n;i--){
int z=LB(all(akt), kor[ind(i)])-akt.begin();
z=low(z, kor[ind(i)]);
refill(z);
akt[z]=kor[ind(i)];
wyn=max(wyn,n-z);
x++;
}
cout << wyn;
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 | #include <bits/stdc++.h> using namespace std; #define LL long long #define all(a) a.begin(),a.end() #define v vector #define pb push_back #define LB lower_bound v<int>akt; int n; void refill(int n){ while(akt[n] and n){ akt[n]=0; n--; } } int low(int i, int n){ if(akt[i]==n) return i; return i-1; } int ind(int i){ if(i<0) return n+i; return i; } int main(){ios_base::sync_with_stdio(0);cin.tie(0); int pom=-1; cin >> n; akt.resize(n,0); v<int>kor(n); for(int i=0;i<n;i++){ cin >> kor[i]; if(kor[i]>=akt[n-1]){ pom=i; akt[n-1]=kor[i]; } } int x=0; int wyn=0; for(int i=pom-1;x<n;i--){ int z=LB(all(akt), kor[ind(i)])-akt.begin(); z=low(z, kor[ind(i)]); refill(z); akt[z]=kor[ind(i)]; wyn=max(wyn,n-z); x++; } cout << wyn; return 0; } |
English