正题

题目链接:https://darkbzoj.tk/problem/4722


题目大意

给出一个长度为nnn的序列值域为[0,v)[0,v)[0,v),要求支持操作

  1. 询问一个区间能否找到两个没有交的非空下标集合使得这些位置的和加上集合的大小相等。
  2. 区间立方然后取模vvv。

1≤n≤105,1≤v≤10001\leq n\leq 10^5,1\leq v\leq 10001≤n≤105,1≤v≤1000


解题思路

考虑如果我们选出了两个有交的集合相等,那么我们把交的部分去掉就变成无交的了,所以无需考虑有没有交。

然后根据抽屉原理对于nnn个元素所有集合总共能表示出2n2^n2n个和,但是和最大只有n×vn\times vn×v所以如果2n>n×v2^n>n\times v2n>n×v时就肯定有解,那么此时会发现当vvv最大时nnn超过131313就肯定有解。

如果元素个数小于或等于131313时我们可以先预处理出一个倍增数组加上一个树状数组来统计每个数最终被修改了多少次就可以得到每个数的具体值了。然后考虑dpdpdp,因为值域比较大可以用bitsetbitsetbitset优化就好了。

时间复杂度O(vlog⁡m+mlog⁡n+m13vω)O(v\log m+m\log n+m\frac{13v}{\omega})O(vlogm+mlogn+mω13v​)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<bitset>
#define lowbit(x) (x&-x)
using namespace std;
const int N=1e5+10;
int n,m,v,f[1100][18],t[N],a[N];
bitset<13001>b;
void Change(int x,int val){while(x<=n){t[x]+=val;x+=lowbit(x);}return;
}
int Ask(int x){int ans=0;while(x){ans+=t[x];x-=lowbit(x);}return ans;
}
int Step(int x,int b){for(int i=0;(1<<i)<=b;i++)if((b>>i)&1)x=f[x][i];return x;
}
int main()
{scanf("%d%d%d",&n,&m,&v);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=0;i<v;i++)f[i][0]=i*i*i%v;for(int j=1;(1<<j)<=n;j++)for(int i=0;i<v;i++)f[i][j]=f[f[i][j-1]][j-1];while(m--){int op,l,r;scanf("%d%d%d",&op,&l,&r);if(op==2)Change(l,1),Change(r+1,-1);else{if(r-l+1>13){puts("Yuno");continue;}b.reset();b[0]=1;bool flag=0;for(int i=l;i<=r;i++){int w=Step(a[i],Ask(i))+1;if((b&(b<<w)).any()){flag=1;break;}b=b|(b<<w);}if(flag)puts("Yuno");else puts("Yuki");}}return 0;
}

bzoj#4722-由乃【倍增,抽屉原理,bitset】相关推荐

  1. CF577B Modulo Sum(dp,抽屉原理 | bitset优化 | 二进制优化)

     洛谷链接: Modulo Sum - 洛谷 思路: 明显是一个背包问题,要求子序列和整除m,即sum%m = 0,所以边取模边求和即可.但是朴素做法的时间复杂度是O(nm),会TLE.有三种优化思路 ...

  2. 【EOJ Monthly 2019.02 - B】解题(思维,抽屉原理,暴力,模运算,优化,tricks)

    题干: 单测试点时限: 2.0 秒 内存限制: 1024 MB "我把房门上锁,并非为了不让她进去,而是为了防止自己逃到她身边". 她又被数学难住了.QQ 小方当然是不会对女生说& ...

  3. CF618F Double Knapsack 构造、抽屉原理

    传送门 首先,选取子集的限制太宽了,子集似乎只能枚举,不是很好做.考虑加强限制条件:将"选取子集"的限制变为"选取子序列"的限制.在接下来的讨论中我们将会知道: ...

  4. poj2356(抽屉原理)

    题意:从输入的N个元素中找出是N的倍数的元素并且输出: 因为这个要求的是连续的数之和,先用sum数组求和:sum[1],sum[1]+sum[2],--,sum[1]+sum[2]+--+sum[n] ...

  5. 牛客算法周周练2 B Music Problem(DP,抽屉原理,二进制拆分)

    链接:https://ac.nowcoder.com/acm/contest/5203/B 来源:牛客网 题目描述 Listening to the music is relax, but for o ...

  6. POJ 2356 Find a multiple (抽屉原理)

    感觉这个题很不错,至少开始真的没想道可以用抽屉原理推出一个结论,然后把这题秒掉.... 已知有n个元素,sum[i]表示从1到i所有数的和...sum[i]%n可以得到一个剩余系,如果出现0,那么结果 ...

  7. 鸽巢原理(抽屉原理)的详解

    抽屉原理 百科名片 桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面放两个苹果.这一现象就是我们所说的"抽屉原理". 抽屉原理的一般含义为: ...

  8. POJ 2356 (抽屉原理)

    题目中说:随便输出一组.抽屉原理可以求出取出的数连续的情况. #include <iostream> #include<cstdio> using namespace std; ...

  9. Algorithm:C++语言实现之SimHash和倒排索引算法相关(抽屉原理、倒排索、建立查找树、处理Hash冲突、Hash查找)

    Algorithm:C++语言实现之SimHash和倒排索引算法相关(抽屉原理.倒排索.建立查找树.处理Hash冲突.Hash查找) 目录 一.SimHash算法 1.SimHash算法五个步骤 2. ...

最新文章

  1. 拖拖拽拽画JAVA报表?
  2. 大物实验计算弹性模量_普渡大学amp;橡树岭国家实验室IPJ:强度高达2.4GPa,双相纳米复合结构助力铝合金性能大幅提高!...
  3. *2-3-7-加入field_automation机制
  4. Druid-目前最好的连接池
  5. dw替换多个html标签,DW查找替换的技巧
  6. 《转载》使用Chrome浏览器截取整个网页
  7. python 读取鼠标选中文本_python怎么读取文本文件
  8. winform与数据库同步更新
  9. ASP.NET Core开发Docker部署
  10. 从命令行安装IIS 7.0
  11. zktime 协议_Zktime考勤管理系统
  12. 理性分析PDD,技术BUG?市场误操?还是……
  13. LAN9220 MII并行接口 PHY设备
  14. CVE-2018-12613 --- 本地文件包含造成远程代码执行漏洞复现
  15. 华为无线设备配置同一业务VLAN的AP间快速漫游
  16. 毕业设计-基于BP神经网络预测系统的设计- MATLAB
  17. 如何在高版本谷歌Chrome浏览器中用VLC播放海康、大华RTSP实时视频?
  18. Matplotlib饼图显示部分数据标签
  19. 37、记录使用 Swin Transformer主干网络去实现分类,并转化NCNN、TNN、MNN模型以及部署
  20. STM32应用(四)蓝牙HC-05模块

热门文章

  1. mysql二阶段提交有什么问题_MySQL的事务两阶段提交的技术有什么意义?
  2. echart 地图 某个地区_中国饮食地图来袭!你爱的口味暗藏健康隐患吗?
  3. 面试官问:你做过什么Java线程池实践,我写了一篇博客给他看~
  4. zen服务器芯片,服务器版Zen处理器简直大杀器:32核64线程,8通道DDR4内存
  5. 帆软获取上月的第一天与最后一天_《原神》岩港打工第一天怎么玩 岩港打工第一天玩法攻略...
  6. java编程_Java编程和C语言的比较
  7. mysql查询语句4,MySQL(4):CRUD语句(2)——基本查询
  8. 端口和进程的关系(详解)
  9. [mybatis]log4j
  10. 数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型的概念