---恢复内容开始---

  HAOI 2019 DAY1 T1 我爆零了。

爆零的感觉很难受 原因竟然是我从没犯过的错误 审题不清。情绪低迷。

也许 也许 也许就是想让我知道我有多菜吧。

可持久化Trie

求前k大的区间异或值 。我硬生生读错题目 想着将区间分成k段 求划分整个区间的最大值。

我还写了一个n^3的dp 觉得只能过60 然后搞了一棵trie树 觉得能过80 然后 发现GG了

这个读错题的我就非常的毒瘤了。 我的RP可能是谷底了吧。

可持久化Trie

这个范围 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;
}
View Code

相关文章: