对于每个询问暴力枚举x~y,然后在Trie去找第k大,开始我写了个二分答案然后算比当前答案大的个数,打了个第10个点的表就跑出19s+比bzoj垫底还慢4s+

然而不用二分,直接1000个点一起在树上跑就可以了。。。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int _=1e2;
const int maxn=1e3+_;
const int maxm=*1e5+_;
int read()
{
int x=,f=; char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=x*+ch-'';ch=getchar();}
return x*f;
}
void write(int x)
{
if(x>=)write(x/);
putchar(x%+'');
}
struct Trie
{
int w[],c;
}tr[maxm*];int trlen,rt[maxm];
int insert(int d)
{
int now=++trlen,ret=now;
tr[now].c++;
for(int i=;i>=;i--)
{
int x=(d&(<<i))?:;
tr[now].w[x]=++trlen;
now=tr[now].w[x];
tr[now].c++;
}
return ret;
}
int merge(int x,int y)
{
if(x==||y==)return x+y;
tr[x].c+=tr[y].c;
tr[x].w[]=merge(tr[x].w[],tr[y].w[]);
tr[x].w[]=merge(tr[x].w[],tr[y].w[]);
return x;
} //----------------------------------------pre--------------------------------------- int calc(int k,int x,int y,int c,int d)
{
if(k==-)return tr[y].c-tr[x].c;
int p=(d&(<<k))?:,q=(c&(<<k))?:;//d的当前位,现在如果这一位要变成1,字典树上往哪走
if(p==)
return tr[tr[y].w[q]].c-tr[tr[x].w[q]].c+calc(k-,tr[x].w[q^],tr[y].w[q^],c,d);//如果当前位是0只要异或成1就一定更大了
else
return calc(k-,tr[x].w[q],tr[y].w[q],c,d);
}
int c[maxn],x,y,u,v;
int check(int d)
{
int ret=;
for(int i=x;i<=y;i++)
{
ret+=calc(,rt[u-],rt[v],c[i],d);
}
return ret;
}
int main()
{
int n,m,d;
n=read(),m=read();
for(int i=;i<=n;i++)c[i]=read();
if(c[]==)
{puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
return ;
}
for(int i=;i<=m;i++)
{
d=read();
rt[i]=insert(d);
rt[i]=merge(rt[i],rt[i-]);
} int Q,k;LL l,r,mid,ans;
Q=read();
while(Q--)
{
x=read(),y=read(),u=read(),v=read(),k=read();
l=,r=;
while(l<=r)
{
mid=(l+r)/;
if(check(mid)>=k)//比mid大的数多于k个
ans=mid,l=mid+;
else
r=mid-;
}
write(ans),puts("");
}
return ;
}

道德的沦丧

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int _=1e2;
const int maxn=1e3+_;
const int maxm=*1e5+_;
int read()
{
int x=,f=; char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=x*+ch-'';ch=getchar();}
return x*f;
}
void write(int x)
{
if(x>=)write(x/);
putchar(x%+'');
} struct Trie
{
int w[],c;
}tr[maxm*];int trlen,rt[maxm];
int insert(int d)
{
int now=++trlen,ret=now;
tr[now].c++;
for(int i=;i>=;i--)
{
int x=(d&(<<i))?:;
tr[now].w[x]=++trlen;
now=tr[now].w[x];
tr[now].c++;
}
return ret;
}
int merge(int x,int y)
{
if(x==||y==)return x+y;
tr[x].c+=tr[y].c;
tr[x].w[]=merge(tr[x].w[],tr[y].w[]);
tr[x].w[]=merge(tr[x].w[],tr[y].w[]);
return x;
} int c[maxn],nx[maxn],ny[maxn],g[maxn];
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
int n,m,d;
n=read(),m=read();
for(int i=;i<=n;i++)c[i]=read();
for(int i=;i<=m;i++)
{
d=read();
rt[i]=insert(d);
rt[i]=merge(rt[i],rt[i-]);
} int Q,k,x,y,u,v;
Q=read();
while(Q--)
{
x=read(),y=read(),u=read(),v=read(),k=read();
int ans=;
for(int i=x;i<=y;i++)nx[i]=rt[u-],ny[i]=rt[v];
for(int i=;i>=;i--)
{
int num=;
for(int p=x;p<=y;p++)//看看如果这一位变成1的方案数是否已经超过k了
{
g[p]=(c[p]&(<<i))?:;//走那边变成1
num+=tr[tr[ny[p]].w[g[p]]].c-tr[tr[nx[p]].w[g[p]]].c;
}
if(num>=k)//超过了,动用1就行了
{
ans|=(<<i);
for(int p=x;p<=y;p++)
nx[p]=tr[nx[p]].w[g[p]],ny[p]=tr[ny[p]].w[g[p]];
}
else //不够,要用0补
{
k-=num;
for(int p=x;p<=y;p++)
nx[p]=tr[nx[p]].w[g[p]^],ny[p]=tr[ny[p]].w[g[p]^];
}
}
write(ans),puts("");
}
return ;
}

bzoj4103: [Thu Summer Camp 2015]异或运算的更多相关文章

  1. [BZOJ4103][Thu Summer Camp 2015]异或运算 可持久化Trie树

    4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec  Memory Limit: 512 MB Description 给定长度为n的数列X={x1 ...

  2. BZOJ4103 [Thu Summer Camp 2015]异或运算 【可持久化trie树】

    题目链接 BZOJ4103 题解 一眼看过去是二维结构,实则未然需要树套树之类的数据结构 区域异或和,就一定是可持久化\(trie\)树 观察数据,\(m\)非常大,而\(n\)和\(p\)比较小,甚 ...

  3. bzoj4103 [Thu Summer Camp 2015]异或运算(可持久化trie)

    内存限制:512 MiB 时间限制:1000 ms 题目描述 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值Aij=xi ...

  4. 【BZOJ 4103】 4103: [Thu Summer Camp 2015]异或运算 (可持久化Trie)

    4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 474  Solved: 258 De ...

  5. 【bzoj4103】[Thu Summer Camp 2015]异或运算 可持久化trie树

    Description 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值Aij=xi xor yj,每次询问给定矩形区域i ...

  6. [BZOJ 4103] [Thu Summer Camp 2015] 异或运算 【可持久化Trie】

    题目链接:BZOJ - 4103 题目分析 THUSC滚粗之后一直没有写这道题,从来没写过可持久化Trie,发现其实和可持久化线段树都是一样的.嗯,有些东西就是明白得太晚. 首先Orz ZYF-ZYF ...

  7. 【BZOJ 4103】 [Thu Summer Camp 2015]异或运算 可持久化01Trie

    我们观察数据:树套树 PASS    主席树 PASS  一层一个Trie PASS 再看,异或!我们就把目光暂时定在01Tire然后我们发现,我们可以带着一堆点在01Trie上行走,因为O(n*q* ...

  8. BZOJ 4103: [Thu Summer Camp 2015]异或运算 可持久化trie

    开始想了一个二分+可持久化trie验证,比正解多一个 log 仔细思考,你发现你可以直接按位枚举,然后在可持久化 trie 上二分就好了. code: #include <bits/stdc++ ...

  9. 【BZOJ 4104】【Thu Summer Camp 2015】解密运算

    http://www.lydsy.com/JudgeOnline/problem.php?id=4104 网上题解满天飞,我也懒得写了 #include<cstdio> #include& ...

随机推荐

  1. 济南学习 Day 5 T1 晚

    取模(mod) [题目描述] 有一个整数a和n个整数b_1, …, b_n.在这些数中选出若干个数并重新排列,得到c_1,…, c_r.我们想保证a mod c_1 mod c_2 mod … mod ...

  2. PHP 之命名空间

    文件A.php namesspace a\b; Class User{ function get_user(){ echo 'this is A Class'; } } 文件B.php namessp ...

  3. 解决三星 BIOS 模式没有 Fast Bios Mode选项 U盘动项问题

    今天想分下盘,进入biso竟然没有网上说 Fast Bios Mode选项,最后自己误打误撞竟然设置成功了,太不可思议了官方这么说:开机按F2进入BIOS设置,找到Boot选项下Boot Device ...

  4. dbms_metadata.get_ddl的使用总结

    https://blog.csdn.net/newhappy2008/article/details/34823339

  5. android连数据库

    package com.rockcheck.mes; import android.os.AsyncTask; import android.support.v7.app.AppCompatActiv ...

  6. [bzoj3308]九月的咖啡店_欧拉筛素数_费用流

    bzoj-3308 九月的咖啡店 题目大意:深绘里在九份开了一家咖啡让,如何调配咖啡民了她每天的头等大事我们假设她有N种原料,第i种原料编号为i,调配一杯咖啡则需要在这里若干种兑在一起.不过有些原料不 ...

  7. Linux使用screen实现关闭ssh连接的情况下,让程序继续在后台运行

    Ubuntu默认没有安装screen,需要手动安装. 安装命令: sudo apt-get install screen 简单的操作方法: 直接输入命令 screen 进入screen子界面,此时pu ...

  8. ganglia-monitoring-centos-linux

    http://www.tecmint.com/install-configure-ganglia-monitoring-centos-linux/ http://monitor.gitlab.net/ ...

  9. 一步步走向国际乱码大赛-- 恶搞C语言

    大家都一直强调规范编码.可是这个世界上有个大师们娱乐的竞赛--国际乱码大赛. 能写出来的都是对语言深入了解的master.我从没想自己也能"恶搞"C,一直都是老老实实编码.就在前几 ...

  10. 公司hadoop客户端试用

    今天用了一下公司的hadoop客户端,从外面下载的客户端不能用,只能用这个wiki里面提供的:link 装在了 tc-cm-201511novam12x12n0.tc 目录 /home/work/vi ...