F. Ivan and Burgers(线性基,离线)
题目链接:http://codeforces.com/contest/1100/problem/F
题目大意:首先输入n,代表当前有n个数,然后再输入m,代表m次询问,每一次询问是询问区间[l,r],这段区间内的数的最大异或值。
具体思路:贪心,我们按照右边界的大小进行排序,小的在上面,大的往下安排,然后每一次我们寻找1--> r区间内的线性基,如果当前的线性基能往后移动,我们就选取后面的这个线性基(因为我们对输入的数据进行了排序,后面的r肯定是大的,所以我们将选取的线性基尽量的往后安排肯定是没有问题的,然后我们查询的时候,看一下当前位上有线性基的时候,先判断这个线性基取的时候是从哪个数里面取出来的,然后再看一下这个数是不是大于l的,如果是的话,这个线性基就是可用的,我们通过这些线性基寻找一个最大值就可以了)
AC代码:
#include<bits/stdc++.h>
using namespace std;
# define ll long long
const int maxn =5e5+;
int sto[maxn],p[maxn],ans[maxn],ord[maxn];
struct node
{
int l,r,id;
} q[maxn];
bool cmp(node t1,node t2)
{
return t1.r<t2.r;
}
void add(int num,int id)
{
for(int i=; i>=; i--)
{
if(((<<i)&num)==)
continue;
if(p[i]==)
{
p[i]=num;
ord[i]=id;
break;
}
if(ord[i]<id)//交换的时候都需要交换。
{
swap(ord[i],id);
swap(num,p[i]);
}
num^=p[i];
}
}
int query(int t)
{
int sum=;
for(int i=; i>=; i--)
{
if(ord[i]>=t&&(sum^p[i])>sum)
sum^=p[i];
}
return sum;
}
int main()
{
int n,m;
scanf("%d",&n);
for(int i=; i<=n; i++)
{
scanf("%d",&sto[i]);
}
scanf("%d",&m);
for(int i=; i<=m; i++)
{
scanf("%d %d",&q[i].l,&q[i].r);
q[i].id=i;
}
sort(q+,q+m+,cmp);
int num=;
for(int i=; i<=m; i++)
{
while(num<q[i].r)
add(sto[++num],num);//将1-r都给压进去。
ans[q[i].id]=query(q[i].l);
}
for(int i=; i<=m; i++)
{
printf("%d\n",ans[i]);
}
return ;
}
F. Ivan and Burgers(线性基,离线)的更多相关文章
- codeforces 1100F Ivan and Burgers 线性基 离线
题目传送门 题意: 给出 n 个数,q次区间查询,每次查询,让你选择任意个下标为 [ l , r ] 区间内的任意数,使这些数异或起来最大,输出最大值. 思路:离线加线性基. 线性基学习博客1 线性基 ...
- Codeforces Round #532 (Div. 2):F. Ivan and Burgers(贪心+异或基)
F. Ivan and Burgers 题目链接:https://codeforces.com/contest/1100/problem/F 题意: 给出n个数,然后有多个询问,每次回答询问所给出的区 ...
- Codeforces 1100 F - Ivan and Burgers
F - Ivan and Burgers 思路:线性基+贪心,保存线性基中每一位的最后一个 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #p ...
- Codeforces1100F. Ivan and Burgers(离线+线性基)
题目链接:传送门 思路: 按查询的右端点离线. 然后从左到右维护线性基. 每个基底更新为最右边的方案,可以让尽量多的查询享受到这个基底. 用ci维护后更新右端点为i的答案. 代码(析构1000ms,别 ...
- CodeForces - 1100F:Ivan and Burgers (线性基&贪心)(离线 在线)
题意:给定N个数,Q次询问,求区间最大异或和. 思路:一开始想的线性基+线段树.单次线性基合并的复杂度为20*20,结合线段树,复杂度为O(NlogN*20*20):显然,超时. 超时代码: #inc ...
- Codeforces Round #532 (Div. 2) F 线性基(新坑) + 贪心 + 离线处理
https://codeforces.com/contest/1100/problem/F 题意 一个有n个数组c[],q次询问,每次询问一个区间的子集最大异或和 题解 单问区间子集最大异或和,线性基 ...
- 【CF1100F】Ivan and Burgers(线性基,分治)
题意:给定n个数,每个数为c[i],有q个询问,每次询问从第l个到第r个数字的最大xor和 n,q<=5e5,c[i]<=1e6,时限3s 思路:直接线段树维护区间线性基是3个log,会T ...
- Codeforces1100F Ivan and Burgers 【整体二分】【线性基】
题目分析: 一道近似的题目曾经出现在SCOI中,那题可以利用RMQ或者线段树做,这题如果用那种做法时间复杂度会是$log$三次方的. 采用一种类似于整体二分的方法可以解决这道题. 将序列的线段树模型建 ...
- AtCoder abc 141 F - Xor Sum 3(线性基)
传送门 题意: 给出\(n\)个数\(a_i\),现在要将其分为两堆,使得这两堆数的异或和相加最大. 思路: 考虑线性基贪心求解. 但直接上线性基求出一组的答案是行不通的,原因之后会说. 注意到如果二 ...
随机推荐
- mysql学习(1)
开始我们基础的mysql学习 第一部分:补充知识 1. 昨天讲到的mysql初始化密码为空,今天又get到一种新的方法 Mysql安装后需要做的 Mysql安装成功后,默认的root用户密码为空,你可 ...
- 《LINUX内核设计与实现》第五章学习总结
一.与内核通信 系统调用:用户控件进程和硬件设备之间添加了一个中间层 系统调用的三个主要作用: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系统中,而在用户 ...
- Python 安装 imread报错
看到一篇博客才解决 http://blog.csdn.net/u010480899/article/details/52701025
- python3 selenium打开Chrome报错闪退问题
ChromeDriver不匹配 Google Chrome 已是最新版本 版本 64.0.3282.186(正式版本) (32 位) ChromeDriver应该选择2.35 下载链接:https ...
- A Zero Flow Entry Expiration Timeout P4 Switch
文章名称:A Zero Flow Entry Expiration Timeout P4 Switch 零流表项期满超时P4交换机 发表时间:2018 期刊来源:SOSR ABSTRACT (摘要) ...
- Java 笔记——MyBatis 生命周期
1.MyBatis 的生命周期 MyBatis的核心组件分为4个部分. SqlSessionFactoryBuilder (构造器): 它会根据配置或者代码来生成SqISessionFactory,采 ...
- (转)广度优先搜索BFS和深度优先搜索DFS
1. 广度优先搜索介绍 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS. 它的思想是:从图中 ...
- DirectoryEntry_Properties属性的遍历(win2008)
DirectoryEntry root = new DirectoryEntry(@"IIS://localhost/W3SVC"); string PInfo = "& ...
- Helm 安装 wordpress
1. 前置需要安装 storageclass 然后 安装helm 客户端 helm tiller 服务端 2. 设置 当前的位阿里云的 repo 3. 查找 wordpress的镜像 helm sea ...
- 9:@RequestMapping 用法详解之地址映射
引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为applicatio ...