洛谷题面传送门

一道挺有意思的题,想到了某一步就很简单,想不到就很毒瘤(

首先看到这样的设问我们显然可以想到背包,具体来说题目等价于对于每个满足 \(i\in[l,r]\) 的 \(a_i\) 赋上一个权值 \(v_i\in\{-1,0,1\}\),满足 \(\sum\limits_{i=l}^rv_ia_i=0\),这是显然可以 \(01\) 背包求解的,时间复杂度 \(qnv\),一脸过不去的亚子,可以使用 bitset 优化到 \(\dfrac{qnv}{\omega}\),但没啥卵用,还是过不去。

这时候我们就要发现一个非常强的性质了。首先比较显然的一点是这个交集为空用处不大,只要不是两个集合重合就行,因为如果交集非空那把交集的部分从两个集合中扣掉和依然是相同的。注意到对于一段区间而言,我们只用判断是否存在两个集合和相同,而对于这个区间的所有子集,它们总共可能贡献出 \(2^{r-l+1}\) 个子集,而和最大只有 \((r-l+1)·v\),因此如果区间长度 \(len\) 满足 \(len·v<2^{len}\),即 \(len\ge 14\),那根据抽屉原理就必然存在两个集合和相同,答案也就是 Yuno 了。

有了这个性质之后事情就变得容易许多。由于 \(len\ge 14\)​ 的情况已经给判掉了,我们只用判断 \(len\le 13\)​ 的情况即可,这个就按照上面的套路 bitset 优化背包即可,甚至实测折半搜 \(q·3^7\) 都可以通过。还有一个小问题是怎样处理修改操作,我们开一棵 BIT 维护每个元素被执行了多少次 \(a_i\leftarrow a_i^3\) 这样的操作,假设这个值为 \(c\),那么显然执行完 \(c\) 次操作后会有 \(a_i=a_i^{3^c}\),一个很直观的想法是扩展欧拉定理降幂,不过由于此题权值很小,可以考虑倍增。具体来说设 \(cub_{i,j}=i^{3^{2^j}}\)​,那么显然有 \(i^{3^{2^j}}=(i^{3^{2^{j-1}}})^{3^{2^{j-1}}}\),倍增一下即可。

时间复杂度 \(n\log n+\dfrac{13qv}{\omega}\)

const int MAXN=1e5;
const int MAXV=1000;
const int DLT=14002;
const int LOG_N=17;
int n,qu,p,cub[MAXV+5][LOG_N+2],t[MAXN+5],a[MAXN+5];
void add(int x,int v){for(int i=x;i<=n;i+=(i&(-i))) t[i]+=v;}
void add_range(int l,int r,int v){add(l,v);add(r+1,-v);}
int query(int x){int ret=0;for(int i=x;i;i&=(i-1)) ret+=t[i];return ret;}
int ask(int x){
int cnt=query(x),cur=a[x];
for(int i=LOG_N;~i;i--) if(cnt>>i&1) cur=cub[cur][i];
return cur;
}
bitset<DLT*2+5> bs;
int main(){
scanf("%d%d%d",&n,&qu,&p);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=0;i<p;i++) cub[i][0]=i*i*i%p;
for(int i=1;i<=LOG_N;i++) for(int j=0;j<p;j++)
cub[j][i]=cub[cub[j][i-1]][i-1];
while(qu--){
int opt,l,r;scanf("%d%d%d",&opt,&l,&r);
if(opt==1){
if(r-l+1>14) puts("Yuno");
else{
bs.reset();
for(int i=l;i<=r;i++){
int v=ask(i)+1;
bs=bs|(bs<<v)|(bs>>v);
bs.set(DLT+v);bs.set(DLT-v);
} printf("%s\n",(bs.test(DLT)?"Yuno":"Yuki"));
}
} else add_range(l,r,1);
}
return 0;
}

洛谷 P5527 - [Ynoi2012] NOIP2016 人生巅峰(抽屉原理+bitset 优化背包)的更多相关文章

  1. 洛谷 P6775 - [NOI2020] 制作菜品(找性质+bitset 优化 dp)

    题面传送门 好久没写过题解了,感觉几天没写手都生疏了 首先这种题目直接做肯定是有些困难的,不过注意到题目中有个奇奇怪怪的条件叫 \(m\ge n-2\),我们不妨从此入手解决这道题. 我们先来探究 \ ...

  2. 【洛谷3648/BZOJ3675】[APIO2014]序列分割(斜率优化DP)

    题目: 洛谷3648 注:这道题洛谷3648有SPJ,要求输出方案.BZOJ3675数据组数较多但不要求输出方案. 分析: 这可能是我第三次重学斜率优化了--好菜啊 这道题首先一看就是个DP.稍微推一 ...

  3. 洛谷P4135 Ynoi2016 掉进兔子洞 (带权bitset?/bitset优化莫队 模板) 题解

    题面. 看到这道题,我第一反应就是莫队. 我甚至也猜出了把所有询问的三个区间压到一起处理然后分别计算对应询问答案. 但是,这么复杂的贡献用什么东西存?难道要开一个数组 query_appear_tim ...

  4. bzoj#4722-由乃【倍增,抽屉原理,bitset】

    正题 题目链接:https://darkbzoj.tk/problem/4722 题目大意 给出一个长度为\(n\)的序列值域为\([0,v)\),要求支持操作 询问一个区间能否找到两个没有交的非空下 ...

  5. 【洛谷P2831】[NOIP2016]愤怒的小鸟

    愤怒的小鸟 题目链接 本来是刷状压DP的,然而不会.. 搜索是比较好想的,直接dfs就行了 我们可以知道两只猪确定一条抛物线 依次处理每一只猪,有以下几种方法: 1.先看已经建立的抛物线是否能打到这只 ...

  6. uoj233/BZOJ4654/洛谷P1721 [Noi2016]国王饮水记 【dp + 斜率优化】

    题目链接 uoj233 题解 下面不加证明地给出几个性质: 小于\(h[1]\)的城市一定是没用的 任何城市联通包含\(1\)且只和\(1\)联通一次 联通顺序从小到大最优 单个联通比多个一起联通要优 ...

  7. 洛谷 P1507 NASA的食物计划 【二维费用背包】 || 【DFS】

    题目链接:https://www.luogu.org/problemnew/show/P1507 题目背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力 ...

  8. 2018.08.28 洛谷P4360 [CEOI2004]锯木厂选址(斜率优化dp)

    传送门 一道斜率优化dp入门题. 是这样的没错... 我们用dis[i]表示i到第三个锯木厂的距离,sum[i]表示前i棵树的总重量,w[i]为第i棵树的重量,于是发现如果令第一个锯木厂地址为i,第二 ...

  9. 洛谷P4360 [CEOI2004]锯木厂选址(dp 斜率优化)

    题意 题目链接 Sol 枚举第二个球放的位置,用前缀和推一波之后发现可以斜率优化 // luogu-judger-enable-o2 #include<bits/stdc++.h> #de ...

随机推荐

  1. HttpRunner3.X - 实现参数化驱动

    一.前言 HttpRunner3.X支持三种方式的参数化,参数名称的定义分为两种情况: 独立参数单独进行定义: 多个参数具有关联性的参数需要将其定义在一起,采用短横线(-)进行连接. 数据源指定支持三 ...

  2. Hadoop MapReduce 保姆级吐血宝典,学习与面试必读此文!

    Hadoop 涉及的知识点如下图所示,本文将逐一讲解: 本文档参考了关于 Hadoop 的官网及其他众多资料整理而成,为了整洁的排版及舒适的阅读,对于模糊不清晰的图片及黑白图片进行重新绘制成了高清彩图 ...

  3. .Net2.0连接PG数据注意事项

    .Net2.0连接PG数据注意事项 第一次用.net操作PG[.NET2.0] 一:Npgsql版本问题 1:如果是.net2.0  建议用2.0.11.0[NuGet搜索npgsql第一个的最低版本 ...

  4. spring security实现简单的url权限拦截

    在一个系统中,权限的拦截是很常见的事情,通常情况下我们都是基于url进行拦截.那么在spring security中应该怎么配置呢. 大致步骤如下: 1.用户登录成功后我们需要拿到用户所拥有的权限,并 ...

  5. Linux多线程编程之详细分析

    线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步.互斥,这些东西将在本文中介绍.我见到这样一道面试题: 是否熟悉POSIX多线程 ...

  6. Python Linux Ubuntu apt安装PyCharm

    PyCharm一个是Python集成开发环境,它既提供收费的专业版,也提供免费的社区版本.PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Proj ...

  7. Python ValueError: Attempted relative import in non-package Relative import相对引用 错误

    包含相对路径import的python脚本不能直接运行,只能作为module被引用. 例如 from . import mod1 有这样代码的文件只能最为moulule为不能直接运行.相对路径就是相对 ...

  8. PWN学习之栈溢出

    目录 PWN学习之栈溢出 前言 写bug bug.cpp源码 OD动态调试bug.exe OD调试观察溢出 栈溢出攻击之突破密码验证 x64位栈溢出 PWN学习之栈溢出 前言 我记得我在最开始学编程的 ...

  9. 安装、卸载 node.js出错 Could not access network location *:\node.js\ 出错

    上周五,WIN10自动更新系统,导致我的node.js 和 Gradle 还有解压的winRAR都不能用!!!可恶 自动更新!!可恶啊!!! 然后我想把node.js重新卸载了再安装,结果 很慌很慌, ...

  10. 安装RedHat和Centos后做的15件事情

    由于之前的Centos 7不支持无线网络连接,我尝试着将内核升级至4.8还是无效,遂决定换回RedHat 7,目前系统已经安装好,版本是Red Hat Enterprise Linux 7.3,下面是 ...