【BZOJ4722】由乃
【BZOJ4722】由乃
题面
题解
考虑到区间长度为\(14\)时子集个数\(2^{14}>14\times 1000\),由抽屉原理,区间长度最多为\(13\)(长度大于这个值就一定有解)。
那么对于一个区间我们可以暴力背包\(dp\)出来,然后\(bitset\)优化下就是\(\frac {13\times 1000}{64}\)的,如果转移时转移的状态与目前状态有交显然就有解。
对于区间立方用树状数组记一下每个数立方了多少次,立方后的数倍增预处理即可。
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <bitset>
using namespace std;
inline int gi() {
register int data = 0, w = 1;
register char ch = 0;
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') w = -1, ch = getchar();
while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
return w * data;
}
const int MAX_N = 1e5 + 5;
int N, Q, Mod, a[MAX_N], c[MAX_N];
inline int lb(int x) { return x & -x; }
void Add(int x, int v) { while (x <= N) c[x] += v, x += lb(x); }
int Sum(int x) { int res = 0; while (x) res += c[x], x -= lb(x); return res; }
bitset<13001> f;
int nxt[18][MAX_N];
int Trans(int x, int y) {
for (int i = 17; ~i; i--)
if (y >> i & 1) x = nxt[i][x];
return x;
}
int main () {
#ifndef ONLINE_JUDGE
freopen("cpp.in", "r", stdin);
#endif
N = gi(), Q = gi(), Mod = gi();
for (int i = 1; i <= N; i++) a[i] = gi();
for (int i = 0; i < Mod; i++) nxt[0][i] = i * i * i % Mod;
for (int i = 1; i < 18; i++)
for (int j = 0; j < Mod; j++) nxt[i][j] = nxt[i - 1][nxt[i - 1][j]];
while (Q--) {
int op = gi(), l = gi(), r = gi();
if (op == 1) {
if (r - l + 1 >= 14) puts("Yuno");
else {
f.reset();
f[0] = 1;
for (int i = l; i <= r; i++) {
int val = Trans(a[i], Sum(i)) + 1;
if ((f & (f << val)).any()) { puts("Yuno"); goto Nxt; }
f |= f << val;
}
puts("Yuki");
Nxt : ;
}
} else Add(l, 1), Add(r + 1, -1);
}
return 0;
}
【BZOJ4722】由乃的更多相关文章
- [bzoj4722]由乃
身为10班人,就凭标题,这道题是一定要做的. 但是做了才发现有毒....所以是信念和题解和大腿支撑了我! 先"假设"自己实力过硬,推出了结论:当区间过大时,必定存在一种方案可以输出 ...
- [BZOJ4722]由乃[鸽巢原理+bitset+倍增]
题意 给定长为 \(n\) 序列 \(a\) ,要求支持两种操作: \(1.\) 询问在一个区间 \([l,r]\) 中,是否能够选出两个交集为空的集合 $ \rm X ,Y$, 使得 \(\sum_ ...
- [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
4722: 由乃 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 360 Solved: 131[Submit][Status][Discuss] D ...
- $bzoj4722$ 由乃 搜索
正解:搜索 解题报告: 传送门$QwQ$ 首先发现长度为$len$的子集的值域为$[0,v\cdot len+len]$,数量为$2^{len}$.所以当$2^{len}\geq v\cdot len ...
随机推荐
- 【转帖】分布式事务之解决方案(XA和2PC)
分布式事务之解决方案(XA和2PC) https://zhuanlan.zhihu.com/p/93459200 博彦信息技术有限公司 java工程师 3. 分布式事务解决方案之2PC(两阶段提交 ...
- Redis-1-简介与安装
目录 1.Redis 简介 2.安装Redis 1.安装gcc redis是c语言编写的 2.下载redis安装包,在root目录下执行 3.解压redis安装包 4.进入redis目录 5.编译安装 ...
- USE11 上oracle11导入数据中文乱码
分类专栏: 数据库 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/suqimm/artic ...
- git commit 统计
git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; lo ...
- python 排序 插入排序与希尔排序
希尔排序是插入排序的升级版,先来了解插入排序 插入排序 算法思想: 插入排序再面对几乎已经有序的数据效率非常高,可以达到线性排序的效率 将数组元素插入已经有序的部分中,具体的过程是在有序的部分中通过比 ...
- redis的主从复制,哨兵值守
环境: 主服务器:192.168.10.10 Centos 7 redis-5.0.4 从服务器:192.168.10.129 Centos 7 redis-5.0.4 从服务器:192. ...
- php服务端搜索,功能改进
php中 ,一直以来,服务端搜索,我都是写一堆条件判断,搜索条件少时还好,条件一多,就显的代码有点丑陋了: 看着非常不舒服.今天在园子里看到一篇文章(http://www.cnblogs.com/xq ...
- 微服务架构 ------ DockerCompose从安装到项目部署
DockerCompose的目的:简化Docker的启动和停止流程,以及编排Docker启动服务与服务之间的关系 DockerCompose的安装:curl -L https://get.daoclo ...
- 【微信小程序】抽象组件使用示例
1.配置页面路径 ./app.json { "pages":[ "pages/index/index", "pages/logs/logs&q ...
- Java 之 Vector 集合
一.构造方法 Vector():构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零. Vector(int initialCapacity) :使用指定的初始容量和等于零的容量增量构造 ...