正题

题目链接: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. Scan error on column index 1, name “created_at“: unsupported Scan, storing driver.Value type []uint8

    使用gorm,出现以下报错 在连接数据库时加上: parseTime=True db, err = gorm.Open(utils.Db, fmt.Sprintf("%s:%s@(%s:%s ...

  2. Ubuntu 16.04LTS下eclipse连接mysql

    第一部分:打开eclipse,新建一个web工程,新建一个类db_test.java(jdbc连接mysql的原理自行百度) import java.sql.*; public class db_te ...

  3. Oracle存储过程锁表

    存储过程: 解决方法如下: 1:查V$DB_OBJECT_CACHE SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CRM_LASTCHGINFO_DAY' ...

  4. Python中的私有属性私有方法、类属性类方法以及单例设计模式

    私有属性是对象不希望公开的属性,私有方法是对象不希望公开的方法.在定义私有属性和私有方法时,在属性或者方法前,加上__(两个下划线) 公有方法可以通过对象名直接调用,私有方法不能通过对象名直接调用,只 ...

  5. vue 元素拖动效果

    <draggable v-model="preface" chosenClass="chosen" ghost-class="ghost&quo ...

  6. Typora代码块配色和标题自带序号的实现代码

    Typora代码块配色和标题自带序号的实现代码 先打开主题文件夹 文件>偏好设置>外观>打开主题文件夹 然后编辑base.user.css(如果没有就新建一个)文件 /*标题自动添加 ...

  7. Spring系列之Mybatis动态代理实现全过程?回答正确率不到1%

    面试中,可能会问到Spring怎么绑定Mapper接口和SQL语句的.一般的答案是Spring会为Mapper生成一个代理类,调用的时候实际调用的是代理类的实现.但是如果被追问代理类实现的细节,很多同 ...

  8. Eclipse开发Java的简单配置

    目录 Eclipse配置Java开发环境 1.配置JDK 2.切换项目的JDK版本 3.配置maven 4.配置lombok Eclipse配置Java开发环境 时隔N年重新使用Eclipse,对一些 ...

  9. Mysql常用sql语句(11)- between and 范围查询

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 between and可以判断值是否在指定范围内 ...

  10. 百度云网速慢?普通VIP也限速?用户激励措施太套路?Pandownload被举报?这些统统没关系,我们自己搭建一个私人云盘服务器

    前言 前几天醒来后,照例耍手机看新闻.在疫情如此严重的档口,一则小小的新闻引起了我内心小小的波动:Pandownload作者被举报了....心里第一件事就是可惜了我盘上的那N多个T的小电影了,&quo ...