【BZOJ 4571】【SCOI 2016】美味
http://www.lydsy.com/JudgeOnline/problem.php?id=4571
这道题因为有加法,不能像可持久化trie那样每次判断只判断一个子树,而是在主席树上查询\(\log n\)个子树。
从高位到低位依次确定\(a_j+x_i\)的二进制位。
注意\(a_j+x_i\)不是\(10^5\)级别的,是两倍大小。
时间复杂度\(O(n\log n+m\log^2n)\)。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 200003;
struct node {
int s, l, r;
} T[N * 20];
int cnt = 0, root[N], n, m;
void update(int &pos, int l, int r, int key) {
T[++cnt] = T[pos]; pos = cnt; ++T[pos].s;
if (l == r) return;
int mid = (l + r) >> 1;
if (key <= mid) update(T[pos].l, l, mid, key);
else update(T[pos].r, mid + 1, r, key);
}
int Q(int TL, int TR, int l, int r, int L, int R) {
if (L <= l && r <= R) return T[TR].s - T[TL].s;
if (T[TR].s - T[TL].s == 0) return 0;
int mid = (l + r) >> 1, s = 0;
if (L <= mid) s += Q(T[TL].l, T[TR].l, l, mid, L, R);
if (R > mid) s += Q(T[TL].r, T[TR].r, mid + 1, r, L, R);
return s;
}
void solve(int b, int x, int TL, int TR) {
int v, num = 0, numl, numr;
for (int i = 17; i >= 0; --i) {
v = (b >> i) & 1 ^ 1;
numl = num | (v << i); numr = numl | (1 << i) - 1;
if (Q(TL, TR, 0, 99999, numl - x, numr - x))
num |= (v << i);
else
num |= ((v ^ 1) << i);
}
printf("%d\n", num ^ b);
}
int main() {
scanf("%d%d", &n, &m);
int ai;
for (int i = 1; i <= n; ++i) {
scanf("%d", &ai);
root[i] = root[i - 1];
update(root[i], 0, 99999, ai);
}
int bi, xi, l, r;
for (int i = 1; i <= m; ++i) {
scanf("%d%d%d%d", &bi, &xi, &l, &r);
solve(bi, xi, root[l - 1], root[r]);
}
return 0;
}
【BZOJ 4571】【SCOI 2016】美味的更多相关文章
- [SCOI 2016]美味
Description 题库链接 给你一个长度为 \(n\) 的序列 \(A\) . \(m\) 组询问 \((b,x,l,r)\) 询问 \[\max_{i=l}^r b\oplus (A_i+x) ...
- bzoj 4568 [SCOI 2016] 幸运数字
题目大意 给定一棵\(n\)个点的树,每个点有权值 \(q\)次询问树上路径中 每个点权值可选可不选的最大异或和 \(n\le 2*10^4,q\le 2*10^5,val[i]\le 2^{60}\ ...
- BZOJ 4571: [Scoi2016]美味
二次联通门 : BZOJ 4571: [Scoi2016]美味 /* BZOJ 4571: [Scoi2016]美味 dalao们都在说这题如果没有加法balabala就可以用可持久化trie解决了 ...
- [LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分
[LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分 题意 给定一个字符串 \(S\), 求有多少种将 \(S\) 的子串拆分为形如 AABB 的拆分方案 \(| ...
- [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)
[BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...
- SCOI 2016 萌萌哒
SCOI 2016 萌萌哒 solution 有点线段树的味道,但是并不是用线段树来做,而是用到另外一个区间修改和查询的利器--ST表 我们可以将一个点拆成\(logN\)个点,分别代表从点\(i\) ...
- 【BZOJ 4568】【SCOI 2016】幸运数字
写了一天啊,调了好久,对拍了无数次都拍不出错来(数据生成器太弱了没办法啊). 错误1:把线性基存成结构体,并作为函数计算,最后赋值给调用函数的变量时无疑加大了计算量导致TLE 错误2:像这种函数(A, ...
- bzoj 4571: [Scoi2016]美味 (主席树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 题面; 4571: [Scoi2016]美味 Time Limit: 30 Sec ...
- BZOJ 4571 美味
又一部SCOI血泪史.... 唉. 就是在这棵树上一遍又一遍跑嘛. 以后不要直接求答案啊.要最后再异或起来. 要学习简单的代码风格. #include<iostream> #include ...
随机推荐
- loj515 「LibreOJ β Round #2」贪心只能过样例
传送门:https://loj.ac/problem/515 [题解] 容易发现S最大到1000000. 于是我们有一个$O(n^2*S)$的dp做法. 容易发现可以被bitset优化. 于是复杂度就 ...
- HDU 1728 逃离迷宫 (广搜)
题目链接 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...
- 安全测试===sqlmap(贰)转载
十二.列举数据 这些参数用于列举出数据库管理系统信息.数据结构和数据内容. 1.一键列举全部数据 参数:--all 使用这一个参数就能列举所有可访问的数据.但不推荐使用,因为这会发送大量请求,把有用和 ...
- 手机User-Agent
iPhone 6(IOS 8.1.2):Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KH ...
- Python抓取花瓣网高清美图
一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网——花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中. ...
- 学习1:python输入输出
1. 输出 >>> print "hello world" hello world >>> print 'hello world' hello ...
- VMware无法识别USB设备
VMware虚拟机开始还能识别USB设备/U盘,突然就不行了,在网上找了好久,提供的方法大致如下: 1. 首先Ctrl+R启动运行,输入services.msc,找到一个VMware USB dr ...
- Java Socket编程基础篇
原文地址:Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Sock ...
- Python+Selenium 自动化实现实例-Link 捕捉元素的几种方法
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.baidu.com&quo ...
- Palindrome Partitioning——回溯算法的又一经典
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...