loj#2016. 「SCOI2016」美味
题目链接
题解
对于不带x的怎么做....可持久化trie树
对于带x,和trie树一样贪心
对于答案的二进制位,从高往低位贪心,
二进制可以表示所有的数,那么每一位的选取情况,对于之后的可选区间也是一定的
贪心时,判断当前位,是否可以为1,
用线段树维护一下,每次走左儿子代表这一位选了1,走又儿子为选了0,这样区间是不交
对于b的限制,改一下查询的区间就行了
代码
#include<cstdio>
#include<algorithm>
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9')c = getchar();
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f;
}
const int maxn = 200007;
int n,m;
int a[maxn];
int rt[maxn],tot = 0 ;
int ls[maxn * 20 + 7],rs[maxn * 20 + 7],sz[maxn * 20 + 7];
void insert(int y,int &x,int l,int r,int k) {
x = ++ tot; ls[x] = ls[y],rs[x] = rs[y]; sz[x] = sz[y] + 1;
if(l == r) return ;
int mid = l + r >> 1;
if(k <= mid) insert(ls[y],ls[x],l,mid,k);
else insert(rs[y],rs[x],mid + 1, r,k);
}
int query(int x,int y,int l,int r,int L,int R) {
if(l >= L && r <= R) return (sz[y] - sz[x] > 0);
int mid = l + r >> 1;
int res = 0;
if(L <= mid) res |= query(ls[x],ls[y],l,mid,L,R);
if(mid < R ) res |= query(rs[x],rs[y],mid + 1,r,L,R);
return res;
}
int main() {
n = read(),m = read();
for(int i = 1;i <= n;++ i) {
a[i] = read();
insert(rt[i - 1],rt[i],0,(1 << 19) - 1,a[i]);
}
for(int i = 1;i <= m;++ i) {
int x,b,l = 0,r = (1 << 19) - 1, ans = 0,L,R;
x = read(),b = read(), L = read(),R = read();
for(int i = 18;i >= 0; -- i) {
int s = (x & (1 << i)) ,mid = l + r >> 1;
int tl = s ? l : mid + 1,tr = s ? mid : r ;
if(query(rt[L - 1],rt[R],0,(1 << 19) - 1,std::max(tl - b,0),std::max(tr - b,0))) ans |= (1 << i), l = s ? l : mid + 1,r = s ? mid : r;
else l = s ? mid + 1 : l,r = s ? r : mid;
}
printf("%d\n",ans);
}
return 0;
}
loj#2016. 「SCOI2016」美味的更多相关文章
- 【LOJ】#2016. 「SCOI2016」美味
题解 做了一下SCOI2015,于是决定搬运SCOI2016= v = 如果没有加法,我们可以向左向右节点查找 每个总权值是2^18 - 1,然后左右分,那么每次是一个完整的节点 如果有了加法,那么我 ...
- AC日记——「SCOI2016」美味 LiBreOJ 2016
#2016. 「SCOI2016」美味 思路: 主席树: 代码: #include <bits/stdc++.h> using namespace std; #define maxa 26 ...
- 「SCOI2016」美味 解题报告
「SCOI2016」美味 状态极差无比,一个锤子题目而已 考虑每次对\(b\)和\(d\)求\(c=d \ xor \ (a+b)\)的最大值,因为异或每一位是独立的,所以我们可以尝试按位贪心. 如果 ...
- loj#2013. 「SCOI2016」幸运数字 点分治/线性基
题目链接 loj#2013. 「SCOI2016」幸运数字 题解 和树上路径有管...点分治吧 把询问挂到点上 求出重心后,求出重心到每个点路径上的数的线性基 对于重心为lca的合并寻味,否则标记下传 ...
- loj#2015. 「SCOI2016」妖怪 凸函数/三分
题目链接 loj#2015. 「SCOI2016」妖怪 题解 对于每一项展开 的到\(atk+\frac{dnf}{b}a + dnf + \frac{atk}{a} b\) 令$T = \frac{ ...
- loj#2012. 「SCOI2016」背单词
题目链接 loj#2012. 「SCOI2016」背单词 题解 题面描述有点不清楚. 考虑贪心 type1的花费一定不会是优的,不考虑, 所以先把后缀填进去,对于反串建trie树, 先填父亲再填儿子, ...
- 「SCOI2016」美味
「SCOI2016」美味 题目描述 一家餐厅有 \(n\) 道菜,编号 \(1 \ldots n\) ,大家对第 \(i\) 道菜的评价值为 \(a_i \:( 1 \leq i \leq n )\) ...
- loj #2013. 「SCOI2016」幸运数字
#2013. 「SCOI2016」幸运数字 题目描述 A 国共有 n nn 座城市,这些城市由 n−1 n - 1n−1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以 ...
- LOJ #2013「SCOI2016」幸运数字
时限为什么这么大啊 明摆着放多$ log$的做法过啊$QAQ$ LOJ #2013 题意 有$ Q$次询问,每次询问树上一条链,点有点权,你需要选择一些链上的点使得异或和尽量大 点数$ \leq 2* ...
随机推荐
- jdk8系列二、jdk8方法引用、重复注解、更好的类型推断、新增注解
一.方法引用 方法引用使得开发者可以直接引用现存的方法.Java类的构造方法或者实例对象.方法引用和Lambda表达式配合使用,使得java类的构造方法看起来紧凑而简洁,没有很多复杂的模板代码. 方法 ...
- 调用链系列三、基于zipkin调用链封装starter实现springmvc、dubbo、restTemplate等实现全链路跟踪
一.实现思路 1.过滤器实现思路 所有调用链数据都通过过滤器实现埋点并收集.同一条链共享一个traceId.每个节点有唯一的spanId. 2.共享传递方式 1.rpc调用:通过隐式传参.dubbo有 ...
- css 悬浮框
<style> .xfk { display: block; position: fixed; top: 150px; lef ...
- activit流程引擎启动流程报错
代码如下: 目录结构 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); @Test public void ...
- Android手势滑动Tab
Android手势滑动Tab //MainActivity.java public class MainActivity extends TabActivity { ; ; ; private Ges ...
- Linux学习指导
初次学习Linux,首先在虚拟机中尝试它. 虚拟机我推荐Virtual Box,我并不主张使用VM,原因是VM是闭源的,并且是收费的,而Virtual Box很小巧,Windows平台下安装包在80M ...
- jq中Deferred对象的使用
var d=$.Deferred(); //deferred下面的方法有: // ["resolve", "resolveWith", "reject ...
- html 页内跳转
第一种 <a href="#div1">to div1</a> //跳转链接<div id="div1">div1</ ...
- 目标检测-yolo2
转载自:http://blog.csdn.net/qq_34784753/article/details/78825493 对于现在的最好的检测系统来说,yolo_v1 的问题主要出现在两方面,也就是 ...
- python 全栈开发,Day23(复习,isinstance和issubclass,反射)
一.复习 class A: def func1(self):pass def func2(self): pass def func3(self): pass a = A() b = A() print ...