4546: codechef XRQRS


可持久化Trie

codechef上过了,bzoj上蜜汁re,看别人说要开5.2e5才行。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 5.2e5+5;
inline int read() {
char c=getchar(); int x=0,f=1;
while(c<'0'||c>'9') {if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}
return x*f;
} void put(int x) {
for(int i=19; i>=0; i--) {
if(x & (1<<i)) putchar('1');
else putchar('0');
}
printf(" %d\n", x);
}
int Q, op, l, r;
int tot;
namespace trie {
#define ch(x, f) t[x].ch[f]
struct node {int ch[2], size;} t[N * 20];
int sz, root[N];
void insert(int &x, int p, int val) { //printf("insert %d %d\n", val, bool(val & (1<<p)));
t[++sz] = t[x]; x = sz;
t[x].size ++;
if(p < 0) return;
if(val & (1<<p)) insert(t[x].ch[1], p-1, val);
else insert(t[x].ch[0], p-1, val);
} int max_xor(int x, int y, int p, int val) {
int ans = 0;
while(p >= 0) {
bool f = ~ val & (1<<p);
if(t[ch(y, f)].size - t[ch(x, f)].size == 0) f ^= 1;
x = t[x].ch[f], y = t[y].ch[f];
if(f) ans |= (1<<p);
p--;
}
return ans;
} int small(int x, int y, int p, int val) {
int ans = 0;
while(p >= 0) {
bool f = val & (1<<p);
if(f) ans += t[ch(y, 0)].size - t[ch(x, 0)].size;
y = ch(y, f), x = ch(x, f);
p--;
}
ans += t[y].size - t[x].size;
return ans;
} int kth(int x, int y, int p, int k) {
int ans = 0, lsize = 0;
while(p >= 0) {
int _ = lsize + t[ch(y, 0)].size - t[ch(x, 0)].size;
if(k <= _) y = ch(y, 0), x = ch(x, 0);
else lsize = _, ans |= (1<<p), y = ch(y, 1), x = ch(x, 1);
p--;
}
return ans;
}
} using trie::root; void add(int x) {
tot++;
root[tot] = root[tot-1];
trie::insert(root[tot], 19, x);
}
void del(int k) {tot -= k;}
void max_xor(int l, int r, int x) { //printf("max_xor %d %d %d\n", l, r, x);
int ans = trie::max_xor(root[l-1], root[r], 19, x);
printf("%d\n", ans);
}
void smaller(int l, int r, int x) {
int ans = trie::small(root[l-1], root[r], 19, x);
printf("%d\n", ans);
}
void kth(int l, int r, int k) { //printf("kth %d %d %d\n", l, r, k);
int ans = trie::kth(root[l-1], root[r], 19, k);
printf("%d\n", ans);
}
int main() {
freopen("in", "r", stdin);
Q = read();
for(int i=1; i<=Q; i++) {
op = read() - 1; //printf("\n-------------------- %d %d\n", i, op);
if(op == 0) add(read());
else if(op == 2) del(read());
else {
l = read(); r = read();
if(op == 1) max_xor(l, r, read());
else if(op == 3) smaller(l, r, read());
else kth(l, r, read());
}
}
}

bzoj 4546: codechef XRQRS [可持久化Trie]的更多相关文章

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

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

  2. BZOJ.5338.[TJOI2018]xor(可持久化Trie)

    BZOJ LOJ 洛谷 惊了,18年了还有省选出模板题吗= = 做这题就是练模板的,我就知道我忘的差不多了 询问一就用以DFS序为前缀得到的可持久化Trie做,询问二很经典的树上差分. 注意求询问二的 ...

  3. bzoj4546-codechef XRQRS(可持久化Trie)

    中文题题意我就不说了 解析: 可持久化Trie的模板题,详见注释 代码 #include<cstdio> #include<cstring> #include<strin ...

  4. BZOJ 3166 HEOI2013 ALO 可持久化trie+st表

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3166(洛谷上也有) 题意概述: 给出一个序列,对于一个区间,其权值为区间中的次大值亦或区 ...

  5. bzoj 3166 [Heoi2013]Alo 可持久化Trie

    3166: [Heoi2013]Alo Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1227  Solved: 569[Submit][Status ...

  6. BZOJ 5338: [TJOI2018]xor 可持久化trie+dfs序

    强行把序列问题放树上,好无聊啊~ code: #include <bits/stdc++.h> #define N 200005 #define setIO(s) freopen(s&qu ...

  7. 可持久化trie 学习总结

    QAQ 以前一直觉得可持久化trie很难,今天强行写了一发觉得还是蛮简单的嘛 自己的模板是自己手写的,写了几道题目并没有出过错误 THUSC的第二题的解法五貌似就是可持久化trie,时间复杂度O(60 ...

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

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

  9. BZOJ.4137.[FJOI2015]火星商店问题(线段树分治 可持久化Trie)

    BZOJ 洛谷 一直觉得自己非常zz呢.现在看来是真的=-= 注意题意描述有点问题,可以看BZOJ/洛谷讨论. 每个询问有两个限制区间,一是时间限制\([t-d+1,t]\),二是物品限制\([L,R ...

随机推荐

  1. c++(爬楼梯)

    前两天上网的时候看到一个特别有意思的题目,在这里和朋友们分享一下: 有一个人准备开始爬楼梯,假设楼梯有n个,这个人只允许一次爬一个楼梯或者一次爬两个楼梯,请问有多少种爬法? 在揭晓答案之前,朋友们可以 ...

  2. Java-String.intern的深入研究

    When---什么时候需要了解String的intern方法: 面试的时候(蜜汁尴尬)!虽然不想承认,不过面试的时候经常碰到这种高逼格的问题来考察我们是否真正理解了String的不可变性.String ...

  3. 百度编辑器ueditor

    ,怎么将上传的图片路径改到项目的public/uploads文件夹呢?哪位大神改过

  4. ssh密码

  5. Red Hat

    同义词 REDHAT一般指Red Hat Red Hat(红帽)公司(NYSE:RHT)是一家开源解决方案供应商,也是标准普尔500指数成员.总部位于美国北卡罗来纳州的罗利市,截止2015年3月3日, ...

  6. iis配置完成,出现HTTP 错误 403.14 - Forbidden

    版权声明:本文为博主原创文章,未经博主允许不得转载.转载请标明文章出处和原文链接. 403.14 禁止访问:在 Web 服务器上已拒绝目录列表 解决方案一:一般情况站点都是不会允许直接读取目录内容的, ...

  7. LAMP LNMP 和 LNMPA

    LAMP指的是:Linux+Apache+MySQL+Perl/PHP/Python LAMP是一个缩写,它指一组通常一起使用来运行动态网站或者服务器的自由软件: Linux,操作系统:  Apach ...

  8. iOS ASIHTTPRequest详解

    ASIHTTPRequest对CFNetwork API进行了封装,并且使用起来非常简单,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用程序中.ASIHTTPRe ...

  9. Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置

    Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置 ============================== ©Copyright 蕃薯耀 2017 ...

  10. Python系列之入门篇——MYSQL

    Python系列之入门篇--MYSQL 简介 python提供了两种mysql api, 一是MySQL-python(不支持python3),二是PyMYSQL(支持python2和python3) ...