---恢复内容开始---
HAOI 2019 DAY1 T1 我爆零了。
爆零的感觉很难受 原因竟然是我从没犯过的错误 审题不清。情绪低迷。
也许 也许 也许就是想让我知道我有多菜吧。
求前k大的区间异或值 。我硬生生读错题目 想着将区间分成k段 求划分整个区间的最大值。
我还写了一个n^3的dp 觉得只能过60 然后搞了一棵trie树 觉得能过80 然后 发现GG了
这个读错题的我就非常的毒瘤了。 我的RP可能是谷底了吧。
这个范围 60分随便写啊 n^2暴力 然后 放堆里出来k个即可。
//#include<bits/stdc++.h> #include<iostream> #include<iomanip> #include<cstdio> #include<cstring> #include<string> #include<ctime> #include<cstdlib> #include<cctype> #include<queue> #include<deque> #include<stack> #include<algorithm> #include<vector> #include<utility> #include<set> #include<bitset> #include<map> #include<cmath> #define ll long long using namespace std; char buf[1<<15],*fs,*ft; inline char getc() { return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++; } inline ll read() { ll x=0,f=1;char ch=getc(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getc();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getc();} return x*f; } inline void put(ll x) { x<0?putchar('-'),x=-x:0; ll num=0;char ch[70]; while(x)ch[++num]=x%10+'0',x/=10; num==0?putchar('0'):0; while(num)putchar(ch[num--]); putchar('\n');return; } const ll MAXN=500002; ll n,k,ans; ll a[MAXN],w[MAXN]; priority_queue<ll> q; int main() { //freopen("1.in","r",stdin); n=read();k=read(); for(ll i=1;i<=n;++i) { a[i]=read(); w[i]=(a[i]^w[i-1]); q.push(w[i]); } for(ll i=1;i<=n;++i) for(ll j=i+1;j<=n;++j) { ll x=(w[i]^w[j]); q.push(x); } for(ll i=1;i<=k;++i) { ans+=q.top(); q.pop(); } put(ans); return 0; }