洛谷题面传送门

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

首先看到这样的设问我们显然可以想到背包,具体来说题目等价于对于每个满足 \(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. python web1

    ***本篇中的测试均需要使用python3完成. 攻击以下面脚本运作的服务器. 针对脚本的代码逻辑,写出生成利用任意代码执行漏洞的恶意序列的脚本: 打开攻击机端口, 将生成的东西输入网页cookie: ...

  2. Java中的函数式编程(五)Java集合框架中的高阶函数

    写在前面 随着Java 8引入了函数式接口和lambda表达式,Java 8中的集合框架(Java Collections Framework, JCF)也增加相应的接口以适应函数式编程.   本文的 ...

  3. Java:内部类小记

    Java:内部类小记 对 Java 中的 内部类,做一个微不足道的小小小小记 首先:内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的. 成员内部类 成员内 ...

  4. Linux入门需要搞清楚的思路问题

    很多同学接触linux不多,对linux平台的开发更是一无所知. 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机it行业从业人员,="" 掌握linux是一种很重要的 ...

  5. stm32学习笔记之GPIO功能框图分析

    GPIO 是通用输入输出端口的简称,简单来说就是STM32 可控制的引脚,STM32 芯片的GPIO 引脚与外部设备连接起来,从而实现与外部通讯.控制以及数据采集的功能.STM32 芯片的GPIO被分 ...

  6. Envoy实现.NET架构的网关(四)集成IdentityServer4实现OAuth2认证

    什么是OAuth2认证 简单说,OAuth 就是一种授权机制.数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据.系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使 ...

  7. 从零开始的DIY智能家居 - 基于 ESP32 的土壤湿度传感器

    前言 自从上次做了那个 甲醛传感器 和 水浊度传感器 之后开始尝到智能家居的甜头了,这两东西有没有用我不知道,但是没事的时候掏出手机瞄两眼,看着就让人很安心( ̄︶ ̄). 于是懒惰的我开始琢磨把给植物浇 ...

  8. 51nod_1006 最长公共子序列,输出路径【DP】

    题意: 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个 ...

  9. hdu 4771 Stealing Harry Potter's Precious (BFS+状压)

    题意: n*m的迷宫,有一些格能走("."),有一些格不能走("#").起始点为"@". 有K个物体.(K<=4),每个物体都是放在& ...

  10. u-boot 1.1.6 start.S 代码学习<转>

    ---转自 http://blog.csdn.net/rockhard/article/details/4166642 ------ /* 参考了别人的一些笔记,看完了启动代码. 本文档记录在看代码时 ...