正解:倍增+并查集

解题报告:

传送门!

最近考试考到了一道类似的题然后就想起这道回来看下,发现题解写得奇奇怪怪的我我我重构下$QwQ$

首先不难想到暴力?就考虑把区间相等转化成对应点对相等,然后直接对应点连边,最后求有几个连通块就好辣

然后看下复杂度,修改是$O(n^2)$查询是$O(n)$,就比较容易想到能不能通过一些技巧变成都是$O(nlogn)$的,结合数据范围发现$nlogn$的复杂度似乎是对的,于是就往这个方面想呗.就不难想到倍增和线段树.

考虑倍增,设$f_{i,j}$表示$[i,i+2^j-1]$这一段区间的信息.然后每次赋值操作就可以二进制拆分成$log$个区间,然后直接赋值$f_{l_1,j}=f_{l_2,j}$.

最后回答询问的时候把所有相等关系下放下去,就$f_{i,j}=f_{i,j+1},f_{i,i+2^{j-1}}=f_{i,j+1}$.

最后统计下联通块个数$cnt$,答案就$10^{cnt}$.

其实是有点类似线段树的$lazy\_tag$操作的$QwQ$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ll long long
#define rg register
#define gc getchar()
#define rp(i,x,y) for(rg int i=x;i<=y;++i)
#define my(i,x,y) for(rg int i=x;i>=y;--i) const int N=1e5+,mod=1e9+;
int n,m,f[N][],poww[],cnt;
ll as=; il int read()
{
rg char ch=gc;rg int x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void pre(){poww[]=;rp(i,,)poww[i]=poww[i-]<<;rp(i,,n)rp(j,,)f[i][j]=i;}
int fd(int x,int lth){return f[x][lth]==x?x:f[x][lth]=fd(f[x][lth],lth);}
il void merg(int x,int y,int lth){int fax=fd(x,lth),fay=fd(y,lth);if(fax!=fay)f[fax][lth]=fay;} int main()
{
// freopen("mmd.in","r",stdin);freopen("mmd.out","w",stdout);
n=read();m=read();pre();
while(m--){int l1=read(),r1=read(),l2=read(),r2=read();my(i,,)if(l1+poww[i]-<=r1)merg(l1,l2,i),l1+=poww[i],l2+=poww[i];}
my(j,,)rp(i,,n-poww[j]+)merg(i,fd(i,j),j-),merg(i+poww[j-],fd(i,j)+poww[j-],j-);
rp(i,,n)if(fd(i,)==i)++cnt;rp(i,,cnt-)as=as*,as%=mod;
printf("%lld\n",as);
return ;
}

放个代码就麻油辣QAQ

洛谷P3295 萌萌哒 [SCOI2016] 倍增+并查集的更多相关文章

  1. 洛谷P3295 [SCOI2016]萌萌哒(倍增+并查集)

    传送门 思路太妙了啊…… 容易才怪想到暴力,把区间内的每一个数字用并查集维护相等,然后设最后总共有$k$个并查集,那么答案就是$9*10^{k-1}$(因为第一位不能为0) 考虑倍增.我们设$f[i] ...

  2. 洛谷P3295 萌萌哒 并查集 + ST表

    又切一道紫题!!! 成功的(看了一吨题解之后),我A掉了第二道紫题. 好,我们仔细观察,发现这是一个排列组合问题. 有些限定条件,要相等的地方,我们就用并查集并起来.最后一查有多少个并查集,就有多少个 ...

  3. 【BZOJ 4569】 4569: [Scoi2016]萌萌哒 (倍增+并查集)

    4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 865  Solved: 414 Description 一个长 ...

  4. [SCOI2016]萌萌哒(倍增+并查集)

    当区间\([a,b]\)和\([c,d]\)对应相等时. 我们把两个区间对应位置上的数所在并查集合并. 最后并查集的数量为\(num\)答案就是\(9*10^num\)因为是个数,不能有前置\(0\) ...

  5. BZOJ4569 SCOI2016萌萌哒(倍增+并查集)

    一个显然的暴力是用并查集记录哪些位之间是相等的.但是这样需要连nm条边,而实际上至多只有n条边是有用的,冗余过多. 于是考虑优化.使用类似st表的东西,f[i][j]表示i~i+2^j-1与f[i][ ...

  6. Bzoj1015/洛谷P1197 [JSOI2008]星球大战(并查集)

    题面 Bzoj 洛谷 题解 考虑离线做法,逆序处理,一个一个星球的加入.用并查集维护一下连通性就好了. 具体来说,先将被消灭的星球储存下来,先将没有被消灭的星球用并查集并在一起,这样做可以路径压缩,然 ...

  7. 洛谷1525 关押罪犯NOIP2010 并查集

    问题描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示某两 ...

  8. 洛谷P1525 关押罪犯(并查集、二分图判定)

    本人蒟蒻,只能靠题解AC,看到大佬们的解题思路,%%%%%% https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编 ...

  9. 洛谷 P2661 信息传递 Label:并查集||强联通分量

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

随机推荐

  1. STM32 多通道ADC采样,采用Timer1进行采样率控制,利用DMA进行传输

    http://blog.csdn.net/varding/article/details/17559399 http://www.51hei.com/stm32/3842.html https://w ...

  2. mysql解除死锁状态

    方案一: 1.查看是否有锁表 show OPEN TABLES ; 2.查询进程(如果你有SUPER权限,你可以看到所有线程.否则,只能看到你自己的线程) show processlist; 3.杀死 ...

  3. Java知多少(31)static关键字以及Java静态变量和静态方法

    static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态 ...

  4. postman中 form-data、x-www-form-urlencoded、raw、binary的区别--转

    原文地址:http://blog.csdn.net/ye1992/article/details/49998511 1.form-data:  就是http请求中的multipart/form-dat ...

  5. 《JavaWeb程序开发入门》课后题

    第一章 1.请编写一个格式良好的XML文档,要求包含足球队一支,队名为Madrid,球员5人:Ronaldo.Casillas.Ramos.Modric.Benzema:篮球队一支,队名为Lakers ...

  6. 采用镜像的方法安装python第三方库

    转自:https://blog.csdn.net/s740556472/article/details/68557330 pip install --index https://pypi.mirror ...

  7. 23种设计模式之原型模式(Prototype)

    在系统开发过程中,有时候有些对象需要被频繁创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后通过复制这个原型对象的办法,创建出更多同类型的对象.原型模式是一种对象创建型模式,用原型实例 ...

  8. day_5.22 py

    #!/usr/bin/env/python #-*-coding:utf-8-*- ''' 私有化 __相当于prevate 外部不能直接调用,只能通过set get方法用 property ''' ...

  9. web 常用开发工具

    he把字符转化为实体字符 awesome-vue Vue资源 clipboard.js 粘贴板 Share.js 一键分享 nock 模拟异步数据 Clamp.js 限制文本最大行数 pinyin 将 ...

  10. WIN7/XP用注册表关联指定后缀名和打开程序(手动【图文】和C编程两种实现)

    前言: 本文是基本原理介绍和手动的操作.程序实现该功能在http://blog.csdn.net/arvon2012/article/details/7839556,同时里面有完整代码的下载. 今天在 ...