BZOJ4184: shallot
Description
小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏。
Input
第一行一个正整数n表示总时间;第二行n个整数a1,a2...an,若ai大于0代表给了小葱一颗数字为ai的小葱苗,否则代表从小葱手中拿走一颗数字为-ai的小葱苗。
Output
输出共n行,每行一个整数代表第i个时刻的最大异或和。
Sample Input
1 2 3 4 -2 -3
Sample Output
3
3
7
7
5
HINT
N<=500000,Ai<=2^31-1
#include<cstdio>
#include<cctype>
#include<queue>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i;i=next[i])
using namespace std;
const int BufferSize=1<<16;
char buffer[BufferSize],*head,*tail;
inline char Getchar() {
if(head==tail) {
int l=fread(buffer,1,BufferSize,stdin);
tail=(head=buffer)+l;
}
return *head++;
}
inline int read() {
int x=0,f=1;char c=Getchar();
for(;!isdigit(c);c=Getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=Getchar()) x=x*10+c-'0';
return x*f;
}
const int maxn=500010;
struct Set {
int A[32];
Set() {memset(A,0,sizeof(A));}
void insert(int val) {
dwn(i,30,0) if(val>>i&1) {
if(!A[i]) {A[i]=val;break;}
val^=A[i];
}
}
int query() {
int res=0;
dwn(i,30,0) res=max(res,res^A[i]);
return res;
}
};
int n,ls[maxn*2],rs[maxn*2],A[maxn],f[maxn],tmp[maxn],last[maxn];
int first[maxn*2],next[maxn*20],num[maxn*20],ToT,e,cnt;
void build(int& o,int l,int r) {
o=++ToT;
if(l==r) return;
int mid=l+r>>1;
build(ls[o],l,mid);build(rs[o],mid+1,r);
}
void AddQuery(int o,int l,int r,int ql,int qr,int v) {
if(ql<=l&&r<=qr) {
num[++e]=v;next[e]=first[o];first[o]=e;
}
else {
int mid=l+r>>1;
if(ql<=mid) AddQuery(ls[o],l,mid,ql,qr,v);
if(qr>mid) AddQuery(rs[o],mid+1,r,ql,qr,v);
}
}
void solve(int o,int l,int r,Set G) {
for(int i=first[o];i;i=next[i]) G.insert(num[i]);
if(l==r) printf("%d\n",G.query());
else {
int mid=l+r>>1;solve(ls[o],l,mid,G);solve(rs[o],mid+1,r,G);
}
}
int main() {
n=read();int rt=0;
rep(i,1,n) tmp[i]=abs(A[i]=read());
sort(tmp+1,tmp+n+1);
rep(i,1,n) last[i]=n+1;
dwn(i,n,1) {
int flag=1;
if(A[i]<0) flag=-1,A[i]=-A[i];
A[i]=lower_bound(tmp+1,tmp+n+1,A[i])-tmp;
f[i]=last[A[i]];last[A[i]]=i;
A[i]*=flag;
}
build(rt,1,n);
rep(i,1,n) if(A[i]>0) AddQuery(1,1,n,i,f[i]-1,tmp[A[i]]);
Set T;solve(1,1,n,T);
return 0;
}
BZOJ4184: shallot的更多相关文章
- BZOJ4184:shallot(线段树分治,线性基)
Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱 ...
- [BZOJ4184]shallot 线段树+线性基
链接 题意:给你每个数字出现的时间和消失的时间,求每个时刻最大异或和 题解 按照时间建立线段树,线段树每个节点开个vector存一下这个时间区间有哪些数,然后递归进入的时候加入线性基,开一个栈记录一下 ...
- 【BZOJ4184】shallot(线段树分治,线性基)
[BZOJ4184]shallot(线段树分治,线性基) 题面 权限题啊.....好烦.. Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把 ...
- 【BZOJ4184】shallot 线段树+vector+线性基
[BZOJ4184]shallot Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从 ...
- 【BZOJ-4184 】 Shallot 线段树按时间分治 + 线性基
4184: shallot Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 356 Solved: 180[Submit][Status][Discu ...
- 【BZOJ4184】shallot 线性基
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4184 此题如果我们不考虑删除元素这一个操作,那么就是一道裸的线性基题. 但是此题会删除 ...
- 【bzoj4184】shallot 线段树+高斯消元动态维护线性基
题目描述 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小 ...
- shallot夏洛特
================================================================= ================================== ...
- BZOJ 4184: shallot
Description 在某时刻加入或删除一个点,问每个时刻的集合中能异或出来的最大值是多少. Sol 线段树+按时间分治+线性基. 按时间分治可以用 \(logn\) 的时间来换取不进行删除的操作. ...
随机推荐
- Python 反编译工具uncompyle2
如何反编译pyc uncompyle2 是一个可以将pyc文件转换为py源码的工具 下载地址:https://github.com/wibiti/uncompyle2 安装: setup.py ins ...
- 【JAVA IO流之字符流】
一.概述. java对数据的操作是通过流的方式.java用于操作流的对象都在IO包中.流按照操作数据不同分为两种,字节流和字符流.流按照流向分为输入流,输出流. 输入输出的“入”和“出”是相当于内存来 ...
- 无废话ExtJs 入门教程十三[上传图片:File]
无废话ExtJs 入门教程十三[上传图片:File] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...
- OCJP(1Z0-851) 模拟题分析(一)11
Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上的,定有 ...
- Flex导出excel报表
sheetToExcel.java 1 package tree; 2 import java.io.BufferedInputStream; 3 import java.io.File; 4 imp ...
- 第二十五篇:在SOUI中做事件分发处理
不同的SOUI控件可以产生不同的事件.SOUI系统中提供了两种事件处理方式:事件订阅 + 事件处理映射表(参见第八篇:SOUI中控件事件的响应) 事件订阅由于直接将事件及事件处理函数连接,不存在事件分 ...
- 6个值得推荐的Android开源框架简介(转)
虽然我们在做app的时候并不一定用到框架,但是一些好框架的思想是非常有学习价值的 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo ...
- Android学习系列(38)--Android源码下载和编译
前面多篇文章介绍到如何下载和编译Android或者CM源码,不过一直都是放在<拓展系列>里.随着学习的深入,android源码是非常有参考和学习价值,强烈推荐大家都去下载,编译,学习,所以 ...
- node.js整理 02文件操作-常用API
NodeJS不仅能做网络编程,而且能够操作文件. 拷贝 小文件拷贝 var fs = require('fs'); function copy(src, dst) { fs.writeFileSync ...
- node入门 express ejs
hello.js var express = require("express"); var app = express(); app.get("/hello" ...