bdfz_2024_summer/day5/perfect/fix.cpp

63 lines
1.5 KiB
C++
Raw Normal View History

2024-08-08 06:12:15 +00:00
#include<bits/stdc++.h>
using namespace std;
2024-08-09 09:12:44 +00:00
#define int long long
2024-08-08 06:12:15 +00:00
const int MAX_N = 3e5+5;
2024-08-09 09:12:44 +00:00
int a[MAX_N],tmax[MAX_N*4],tmin[MAX_N*4];
int n;
int ans=INT_MIN;
2024-08-08 06:12:15 +00:00
2024-08-09 09:12:44 +00:00
void build(int tmin[],int tmax[],int a[],int s,int e,int n){
if(s==e){
tmax[n]=tmin[n]=a[s];
return;
}
int m=s+(e-s)/2;
build(tmin, tmax, a, s, m, n*2);
build(tmin, tmax, a, m+1, e, n*2+1);
tmax[n]=max(tmax[n*2],tmax[n*2+1]);
tmin[n]=min(tmin[n*2],tmin[n*2+1]);
}
int search_max(int tmax[],int s,int e,int n,int l,int r){
if(l<=s&&e<=r)return tmax[n];
if(e<l||r<s)return LONG_LONG_MIN;
int m=s+(e-s)/2;
int nmax=LONG_LONG_MIN;
if(l<=m)nmax=max(search_max(tmax, s, m, n*2, l, r),nmax);
if(m<r)nmax=max(search_max(tmax, n+1, e, n*2+1, l, r),nmax);
return nmax;
}
2024-08-08 06:12:15 +00:00
2024-08-09 09:12:44 +00:00
int search_min(int tmin[],int s,int e,int n,int l,int r){
if(l<=s&&e<=r)return tmin[n];
if(e<l||r<s)return LONG_LONG_MAX;
int m=s+(e-2)/2;
int nmin=LONG_LONG_MAX;
if(l<=m)nmin=min(search_max(tmax, s, m, n*2, l, r),nmin);
if(m<r)nmin=min(search_max(tmax, m+1, e, n*2+1, l, r),nmin);
return nmin;
}
2024-08-08 15:43:59 +00:00
2024-08-09 09:12:44 +00:00
signed main(){
ios::sync_with_stdio(false);
2024-08-08 06:12:15 +00:00
cin.tie(0);
2024-08-09 09:12:44 +00:00
2024-08-08 06:12:15 +00:00
cin>>n;
for(int i=1;i<=n;i++){
2024-08-09 09:12:44 +00:00
cin>>a[i];
2024-08-08 15:43:59 +00:00
}
2024-08-09 09:12:44 +00:00
build(tmin, tmax, a, 1, n, 1);
2024-08-08 15:43:59 +00:00
for(int l=1;l<=n;l++){
for(int r=l;r<=n;r++){
2024-08-09 09:12:44 +00:00
ans=max(
search_max(tmax, 1, n, 1, l, r)
^
search_min(tmin, 1, n, 1, l, r)
,
ans
);
2024-08-08 06:12:15 +00:00
}
}
2024-08-08 15:43:59 +00:00
cout<<ans<<endl;
2024-08-08 06:12:15 +00:00
}