#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int n, max, a[1000000], b[1000000], c[1000000];
int l = 0, r = 0;//b[l]存储最大值的下标 c[r]存储最小值的下标
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
for (int i = 1; i <= n; i++) {
if (i == 1) {
b[++l] = i;
c[++r] = i;
}
else {
if (a[i] <= a[b[l]]) {//如果当前元素小于栈顶元素 5 2 1 才会出现这种情况
b[++l] = i;
c[++r] = i;
}
else {
b[l] = i;
while (a[i] > a[b[l - 1]] && l > 1) {
b[--l] = i;
--r;
c[r] = a[c[r]] > a[c[r + 1]] ? c[r+1] : c[r];
}
max = max > b[l] - c[r] + 1 ? max: b[l] - c[r] + 1;
}
}
}
printf("%d\n", max);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS // 用于避免VS编译器警告关于不安全的函数
#include<bits/stdc++.h>
using namespace std;
int n,b[1000001], ans;
unsigned long long a[1000001];
int main() {
scanf("%d", &n);
int j = 0;// 栈顶指针
for (int i = 1; i <= n; i++) {
scanf("%llu", &a[i]);
}
for (int i = 1; i <= n; i++) {
if (j == 0) {
b[++j] = i;
ans = ans ^ i;
}
else
{
if (a[i] <= a[b[j]]) {
b[++j] = i;
ans = ans ^ i;
}
else
{
while (j > 0 && a[i] > a[b[j]]) {
ans = ans ^ b[j];
j--;
}
b[++j] = i;
ans = ans ^ i;
}
}
printf("%d\n", ans);
}
return 0;
}