Description

给定一个初始时为空的整数序列(元素由1开始标号)以及一些询问:
类型1:在数组后面就加入数字x。
类型2:在区间L…R中找到y,最大化(x xor y)。
类型3:删除数组最后K个元素。
类型4:在区间L…R中,统计小于等于x的元素个数。
类型5:在区间L…R中,找到第k小的数。
 
 

Input

输入数据第一行为一个整数q,表示询问个数,接下来q行,每行一条询问 对应题目描述。
类型1的询问格式为“1 x”。
类型2的询问格式为“2 L R x”。
类型3的询问格式为“3 k”。
类型4的询问格式为“4 L R x”。
类型5的询问格式为“5 L R k”。
 

Output

对于每个2、4、5询问输出一行对应答案
 

Sample Input

10
1 8
5 1 1 1
1 2
2 2 2 7
2 2 2 7
1 1
4 2 2 2
2 1 2 3
4 1 3 5
1 6

Sample Output

8
2
2
1
8
2

HINT

令N表示每次询问前数组中元素的个数
1<=L<=R<=N
1<=x<=500,000
对于第三类询问 1<=k<=N       
对于第五类询问 k<=R-L+1 
1<=N<=500,000
 
将操作树建出来,那么当前序列就是它到根的路径,然后用棵可持久化Trie就可以完成几个操作了。
这道题竟然不能用fread,我的正确率。!。~。
#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;
const int maxnode=10000010;
int ch[maxnode][2],s[maxnode],ToT;
void insert(int& ny,int x,int val) {
ny=++ToT;int y=ny;s[y]=s[x]+1;
dwn(i,18,0) {
int c=val>>i&1;
ch[y][0]=ch[x][0];ch[y][1]=ch[x][1];
s[ch[y][c]=++ToT]=s[ch[x][c]]+1;
y=ch[y][c];x=ch[x][c];
}
}
int querymx(int y,int x,int val) {
int ans=0;
dwn(i,18,0) {
int c=val>>i&1;
if(s[ch[y][c^1]]-s[ch[x][c^1]]) ans|=(1<<i),c^=1;
x=ch[x][c];y=ch[y][c];
}
return ans;
}
int query(int y,int x,int val) {
int ans=0;
dwn(i,18,0) {
int c=val>>i&1;
if(c) ans+=s[ch[y][0]]-s[ch[x][0]];
x=ch[x][c];y=ch[y][c];
}
return ans;
}
int kth(int y,int x,int k) {
int ans=0;
dwn(i,18,0) {
int k2=s[ch[y][0]]-s[ch[x][0]];
if(k<=k2) x=ch[x][0],y=ch[y][0];
else ans|=(1<<i),k-=k2,x=ch[x][1],y=ch[y][1];
}
return ans;
}
int n,top,fa[maxn],root[maxn],S[maxn];
int main() {
int p=0;
dwn(T,read(),1) {
int tp=read();
if(tp==1) insert(root[++n],root[p],read()),fa[n]=p,S[++top]=p=n;
else if(tp==3) dwn(i,read(),1) p=fa[p],top--;
else {
int l=read(),r=read(),x=read();
if(tp==2) printf("%d\n",x^querymx(root[S[r]],root[S[l-1]],x));
if(tp==4) printf("%d\n",query(root[S[r]],root[S[l-1]],x+1));
if(tp==5) printf("%d\n",kth(root[S[r]],root[S[l-1]],x));
}
}
return 0;
}

  

BZOJ4546: codechef XRQRS的更多相关文章

  1. bzoj 4546: codechef XRQRS [可持久化Trie]

    4546: codechef XRQRS 可持久化Trie codechef上过了,bzoj上蜜汁re,看别人说要开5.2e5才行. #include <iostream> #includ ...

  2. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  3. Involuting Bunny! (2021.9)

      文化课就很掉头发,文科都能学好我还怕竞赛?(   大概从"刷的题的题解"推广为"所有做的题的题解"吧,兔子比较懒,这样写题解轻松一些.   Gym10305 ...

  4. 【BZOJ-3514】Codechef MARCH14 GERALD07加强版 LinkCutTree + 主席树

    3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 1288  Solved: 490 ...

  5. 【BZOJ4260】 Codechef REBXOR 可持久化Trie

    看到异或就去想前缀和(⊙o⊙) 这个就是正反做一遍最大异或和更新答案 最大异或就是很经典的可持久化Trie,从高到低贪心 WA: val&(1<<(base-1))得到的并不直接是 ...

  6. codechef 两题

    前面做了这场比赛,感觉题目不错,放上来. A题目:对于数组A[],求A[U]&A[V]的最大值,因为数据弱,很多人直接排序再俩俩比较就过了. 其实这道题类似百度之星资格赛第三题XOR SUM, ...

  7. codechef January Challenge 2014 Sereja and Graph

    题目链接:http://www.codechef.com/JAN14/problems/SEAGRP [题意] 给n个点,m条边的无向图,判断是否有一种删边方案使得每个点的度恰好为1. [分析] 从结 ...

  8. BZOJ3509: [CodeChef] COUNTARI

    3509: [CodeChef] COUNTARI Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 339  Solved: 85[Submit][St ...

  9. CodeChef CBAL

    题面: https://www.codechef.com/problems/CBAL 题解: 可以发现,我们关心的仅仅是每个字符出现次数的奇偶性,而且字符集大小仅有 26, 所以我们状态压缩,记 a[ ...

随机推荐

  1. Jmeter在restful风格接口测试中的应用

    1.如何下载安装 官网下载,一个压缩包apache-jmeter-3.0.zip,解压即可,打开bin目录下jmeter.bat即可打开软件. 2.熟悉界面 3.实际案例 测试restful风格接口 ...

  2. java compiler level does not match the version of the installed java project

    修改:工程/.settings/”目录下找到名为 org.eclipse.wst.common.project.facet.core.xml

  3. C# XML操作

    一.简单介绍 using System.Xml; //初始化一个xml实例 XmlDocument xml=new XmlDocument(); //导入指定xml文件 xml.Load(path); ...

  4. wp8 入门到精通 数据库更新字段(一)

    public class UserInfoDB : BaseDB { public UserInfoDB() : base(@"Data Source=isostore:\MakeLove\ ...

  5. Linux命令之ar - 创建静态库.a文件和动态库.so

    转自:http://blog.csdn.net/eastonwoo/article/details/8241693 用途说明 创建静态库.a文件.用C/C++开发程序时经常用到,但我很少单独在命令行中 ...

  6. JSP/Servlet的编码原理

    转自:http://janwer.iteye.com/blog/150226 首先,说说 JSP/Servlet 中的几个编码的作用 在 JSP/Servlet 中主要有以下几种设置编码的方式: pa ...

  7. WebView相关

    Android WebView使用基础 Android WebView中的JavaScript代码使用 很不错的例子:android webview js交互 第一节 (java和js交互)

  8. ubuntu中jdk已经安装,但是eclipse启动报错

    问题描述 在ubuntu中,jdk已经正常安装,java_home变量已经配置,但是启动eclipse的时候还是弹出以下错误信息: A Java RunTime Environment (JRE) o ...

  9. jBox使用记录

    1.不显示底部按钮,可以将buttons设置为buttons:{} 例:$.jBox.open("iframe:http://www.baidu.com", "百度一下& ...

  10. JS 正则表达式详解

    在此提供相关的链接,请访问: http://www.cnblogs.com/dolphinX/p/3486214.html http://www.cnblogs.com/dolphinX/p/3486 ...