正题

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


题目大意

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

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

\(1\leq n\leq 10^5,1\leq v\leq 1000\)


解题思路

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

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

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

时间复杂度\(O(v\log m+m\log n+m\frac{13v}{\omega})\)


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. 洛谷 P5527 - [Ynoi2012] NOIP2016 人生巅峰(抽屉原理+bitset 优化背包)

    洛谷题面传送门 一道挺有意思的题,想到了某一步就很简单,想不到就很毒瘤( 首先看到这样的设问我们显然可以想到背包,具体来说题目等价于对于每个满足 \(i\in[l,r]\) 的 \(a_i\) 赋上一 ...

  2. CodeForces485A——Factory(抽屉原理)

    Factory One industrial factory is reforming working plan. The director suggested to set a mythical d ...

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

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

  4. 【9.23校内测试】【抽屉原理】【乱搞??(找众数】【Trie】

    看到题目一开始想到的是一道求子集和的异或和,可以用$bitset$实现求子集和.然而这道题如果要强算子集和肯定是带不动的,况且还要算方案,所以尝试去找题目中的性质. 看到整除,很容易想到如果是一段区间 ...

  5. uva202:循环小数(循环节+抽屉原理)

    题意: 给出两个数n,m,0<=n,m<=3000,输出n/m的循环小数表示以及循环节长度. 思路: 设立一个r[]数组记录循环小数,u[]记录每次的count,用于标记,小数计算可用 r ...

  6. hdu 3303 Harmony Forever (线段树 + 抽屉原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=3303 Harmony Forever Time Limit: 20000/10000 MS (Java/Othe ...

  7. 《Mathematical Olympiad——组合数学》——抽屉原理

    抽屉原理可以说是组合数学中最简单易懂的一个原理了,其最简单最原始的一个表达形式:对于n本书放到n-1个抽屉中,保证每个抽屉都要有书,则必存在一个抽屉中有2本书.但是这个简单的原理在很多问题中都能够巧妙 ...

  8. poj2356 Find a multiple(抽屉原理|鸽巢原理)

    /* 引用过来的 题意: 给出N个数,问其中是否存在M个数使其满足M个数的和是N的倍数,如果有多组解, 随意输出一组即可.若不存在,输出 0. 题解: 首先必须声明的一点是本题是一定是有解的.原理根据 ...

  9. POJ- Find a multiple -(抽屉原理)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6452   Accepted: 2809   Special Judge D ...

随机推荐

  1. [ES6深度解析]13:let const

    当Brendan Eich在1995年设计了JavaScript的第一个版本时,他犯了很多错误,包括从那时起就成为该语言一部分的一些错误,比如Date对象和当你不小心将它们相乘时对象会自动转换为NaN ...

  2. 最简 jenkins-agent 镜像

    jenkins-agent 老版本叫 jenkins-slave,利用K8S集群集成 JENKINS,可以更好的利用系统资源,扩展更方便.如果构建频繁 jenkins-agent iamge 比较大, ...

  3. Ubuntu系统开放指定端口

    今天在一台Ubuntu服务器里面配置了一个Nginx服务,监听的8080端口.本机可以访问,但是局域网就是访问不到.首先怀疑防火墙没有开放8080端口,设置ufw防火墙开放8080端口 $ sudo ...

  4. .Net Core 踩坑记录--无法逐步调试类库文件

    前提 新建类库 在新项目中引用该类库 将类库对应的.PDB文件 拷贝至新项目的bin文件夹下 结果 无法进行跟踪调试 狗带 分析与解决 1: 打开 工具-->选项-->调试 2: 常规-- ...

  5. 本文详细阐述如何用C#创建COM组件,并能用VC6.0等调用。

    本文详细阐述如何用C#创建COM组件,并能用VC6.0等调用. 附:本文适用任何VS系列工具. 在用C#创建COM组件时,一定要记住以下几点: 1.所要导出的类必须为公有: 2.所有属性.方法也必须为 ...

  6. 关于Ubuntu18.04 linux系统使用安装JDK Mysql

    平台部署 一.安装JDK step1.下载OracleJDKstep2. 解压step3. 加入环境变量 具体操作如下: lemon@ubuntu:~$ cd ~/download/ lemon@ub ...

  7. Struts2常见问题

    时间:2017-1-14 21:29 1.配置Struts2过滤器之后无法正常访问Servlet    自己手动配置过滤器,参数为要访问的Servlet

  8. 算法入门 - 链表的实现及应用(Java版本)

    之前我们学习了动态数组,虽然比原始数组的功能强大了不少,但还不是完全纯动态的(基于静态数组实现的).这回要讲的链表则是正儿八经的动态结构,是一种非常灵活的数据结构. 链表的基本结构 链表由一系列单一的 ...

  9. python json demo

    值得注意的一点是,list类型的数据可以用[2,3]的方式定义,如"b" import json jsonData = '{"a":1,"b" ...

  10. vue 引用高德地图

    vue 引用地图之傻瓜式教程(复制粘贴即可用) npm 下载 npm install vue-amap --save main.js 代码 import AMap from 'vue-amap'; V ...