比赛 收心赛 评测结果 AAAAAAAATTTTAAAATTTT
题目名称 异或粽子 最终得分 60
用户昵称 张雨晴 运行时间 18.135 s
代码语言 C++ 内存使用 36.12 MiB
提交时间 2026-02-24 11:36:33
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
int a[500005];
int tree[2000005];
priority_queue<int,vector<int>,less<int> >q;
void build(int k,int l,int r){
    if(l==r){
        tree[k]=a[l];
        return ;
    }
    int mid=(long long)(l/2)+(r/2);
    build(k*2,l,mid);
    build(k*2+1,mid+1,r);
    tree[k]=tree[k*2]^tree[k*2+1]; 
}
int query(int k,int l,int r,int x,int y){
    if(x<=l&&r<=y){
        return tree[k];
    }else if(r<x||y<l){
        return 0;
    }
    int mid=(long long)(l/2)+(r/2);
    return query(k*2,l,mid,x,y)^query(k*2+1,mid+1,r,x,y);
}
signed main(){
    freopen("xor.in","r",stdin);
    freopen("xor.out","w",stdout);
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    build(1,1,n);
    for(int l=1;l<=n;l++){
        for(int r=l;r<=n;r++){
//            cout<<l<<" "<<r<<" "<<query(1,1,n,l,r)<<"\n";
            q.push(query(1,1,n,l,r));
        }
    }
    int ans=0;
    for(int i=1;i<=k;i++){
        ans+=q.top();
        q.pop();
    }
    cout<<ans;
    return 0;
}