提交时间:2024-11-21 15:57:41
运行 ID: 35014
#include<bits/stdc++.h> using namespace std; #define N 22 int n; long long a[N],pre[N][1100000]; long long low[N],now,tmp[1100000]; int lowbit(int x){ return x&(-x); } int len(int x){ int ans=0; while (x) { x>>=1; ans++; } return ans; } int main(){ //freopen("balala.in","r",stdin); //freopen("balala.out","w",stdout); ios::sync_with_stdio(0); cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++){ pre[i][0]=a[i]; low[i]=2e18; for(int j=1;j<(1<<(i-1));j++){ pre[i][j]=pre[i][j^lowbit(j)]^a[len(lowbit(j))]; } }/* for(int i=1;i<=n;i++){ for(int j=0;j<(1<<(i-1));j++){ cout<<pre[i][j]<<' '; } cout<<endl; }*/ for(int i=1;i<=n;i++){ memset(tmp,0,sizeof(tmp)); bool up=0; for(int j=0;j<(1<<(i-1));j++){ if(pre[i][j]>low[now]){ tmp[j]=now+1; up=1; }else{ int p=lower_bound(low+1,low+now+1,pre[i][j])-low; if(p<=now) tmp[j]=p; } } for(int j=0;j<(1<<(i-1));j++){ if(tmp[j]) low[tmp[j]]=min(low[tmp[j]],pre[i][j]); } now+=up; } cout<<now<<endl; return 0; }