| 比赛 |
收心赛 |
评测结果 |
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;
}