Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
35014 swzzzz 【S】T3 C++ 解答错误 50 1000 MS 16744 KB 1354 2024-11-21 15:57:41

Tests(5/10):


#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; }


测评信息: