Luogu P3295

mrclr两周前做的题让蒟蒻的我现在做?

第一眼组合计数,如果把数字相同的数位看作一个整体,除了第一位不能为零,剩下的每一位都有$0$~$9$十种。

设不同的位数为$x$,那么答案即为$9*10$x-1

给出两段相同的区间,可以把它们看作单独的一位一位对应,用并查集把它们合并。

复杂度为$O(n^2)$。

考虑优化。发现修改操作有$n$次,查询只有$1$次。

有效的修改操作最多只有$n-1$次,所以一定有重复的操作。

把复杂度平衡一下。合并区间时,直接将大区间合并,最后将合并标记从大到小下传。

这样,合并的复杂度变小,查询的复杂度变大了。用倍增——也就是二进制拆分的做法,可以让修改、查询的复杂度都变为$O(nlogn)$

$fa[x][i]$表示从$x$开始,长度为$2^i$的区间的父亲(区间),

合并时,将一段区间用二进制拆分成若干个区间并合并;

最后查询时,从最大的区间长度开始枚举,将$[x][i]$的左右两半区间分别与$fa[x][i]$的左右两半区间合并。

void pushdown() {
for(int j = ; j; j--)
for(int i = ; i+(<<j)- <= n; i++) {
int ii = getfa(i,j);
merge(i,ii,j-); //左一半
merge(i + (<<(j-)),ii + (<<(j-)),j-);//右一半
}
}

最后查询并查集个数即可w

代码如下

#include<cstdio>
#include<iostream>
#define MogeKo qwq
#define ll long long
using namespace std;
const int maxn = 1e5+;
const ll mod = 1e9+; int n,m,fa[maxn][];
int l1,l2,r1,r2;
ll cnt; ll qpow(ll a,ll b) {
ll ans = ;
ll base = a;
while(b) {
if(b&) (ans *= base) %= mod;
(base *= base) %= mod;
b >>= ;
}
return ans%mod;
} void init() {
for(int i = ; i <= n; i++)
for(int j = ; j <= ; j++)
fa[i][j] = i;
} int getfa(int x,int k) {
if(fa[x][k] == x)return x;
return fa[x][k] = getfa(fa[x][k],k);
} void merge(int x,int y,int k) {
int xx = getfa(x,k);
int yy = getfa(y,k);
fa[xx][k] = yy;
} void pushdown() {
for(int j = ; j; j--)
for(int i = ; i+(<<j)- <= n; i++) {
int ii = getfa(i,j);
merge(i,ii,j-);
merge(i + (<<(j-)),ii + (<<(j-)),j-);
}
} int main() {
scanf("%d%d",&n,&m);
if(n == ) {
printf("");
return ;
}
init();
for(int i = ; i <= m; i++) {
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
for(int j = ; j >= ; j--)
if(l1+(<<j)- <= r1) {
merge(l1,l2,j);
l1 += (<<j);
l2 += (<<j);
}
}
pushdown();
for(int i = ; i <= n; i++)
if(fa[i][] == i)cnt++;
printf("%lld",(*qpow(,cnt-))%mod);
return ;
}

[SCOI2016]萌萌哒的更多相关文章

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

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

  2. 【LG3295】[SCOI2016]萌萌哒

    [LG3295][SCOI2016]萌萌哒 题面 洛谷 题解 考虑现在我们如果一次只是限定两个位置相等该怎么做, 直接将这些位置用并查集并起来然后答案就是 \[ ans= \begin{cases} ...

  3. 4569: [Scoi2016]萌萌哒

    4569: [Scoi2016]萌萌哒 链接 分析: 每次给出的两个区间长度是一样的,对应位置的数字也是一样的,那么可以将两两对应的数字用并查集合并,设最后有$cnt$个不同的集合,答案就是$9\ti ...

  4. 【BZOJ4569】[Scoi2016]萌萌哒 倍增+并查集

    [BZOJ4569][Scoi2016]萌萌哒 Description 一个长度为n的大数,用S1S2S3...Sn表示,其中Si表示数的第i位,S1是数的最高位,告诉你一些限制条件,每个条件表示为四 ...

  5. [BZOJ4569] [Luogu 3295] [SCOI2016]萌萌哒(并查集+倍增)

    [BZOJ4569] [Luogu 3295] [SCOI2016]萌萌哒(并查集+倍增) 题面 有一个n位的十进制数a(无前导0),给出m条限制,每条限制\((l_1,r_1,l_2,r_2)(保证 ...

  6. Luogu P3295 [SCOI2016]萌萌哒(并查集+倍增)

    P3295 [SCOI2016]萌萌哒 题面 题目描述 一个长度为 \(n\) 的大数,用 \(S_1S_2S_3 \cdots S_n\) 表示,其中 \(S_i\) 表示数的第 \(i\) 位, ...

  7. 洛谷P3295 [SCOI2016]萌萌哒 题解

    洛谷P3295 [SCOI2016]萌萌哒 题目描述 公式粘过来就乱了,还是去洛谷看题吧 分析 如果暴力解决的话就是使用并查集把位数相同的数位并在一起.比如区间[1,2]和区间[3,4]的数字完全相同 ...

  8. BZOJ4569 : [Scoi2016]萌萌哒

    建立ST表,每层维护一个并查集. 每个信息可以拆成两条长度为$2$的幂次的区间相等的信息,等价于ST表里两对点的合并. 然后递归合并,一旦发现已经合并过了就退出. 因为一共只会发生$O(n\log n ...

  9. bzoj 4569: [Scoi2016]萌萌哒

    Description 一个长度为n的大数,用S1S2S3...Sn表示,其中Si表示数的第i位,S1是数的最高位,告诉你一些限制条件,每个条 件表示为四个数,l1,r1,l2,r2,即两个长度相同的 ...

  10. BZOJ 4569: [Scoi2016]萌萌哒 [并查集 倍增]

    传送门 题意:长为$n \le 10^5$的数字,给出$m \le 10^5$个限制$[l1,r1]\ [l2,r2]$两个子串完全相等,求方案数 把所有要求相等的位置连起来,不就是$9*10^{连通 ...

随机推荐

  1. 【c#】RabbitMQ学习文档(七)C# API

    今天这篇博文是我翻译的RabbitMQ的最后一篇文章了,介绍一下RabbitMQ的C#开发的接口.好了,言归正传吧. Net/C# 客户端 API简介 主要的命名空间,接口和类 定义核心的API的接口 ...

  2. 阿里云HBase全新发布X-Pack 赋能轻量级大数据平台

    一.八年双十一,造就国内最大最专业HBase技术团队 阿里巴巴集团早在2010开始研究并把HBase投入生产环境使用,从最初的淘宝历史交易记录,到蚂蚁安全风控数据存储.持续8年的投入,历经8年双十一锻 ...

  3. ASP.NET MVC5多语言切换快速实现方案

    功能 实现动态切换语言,Demo做了三种语言库可以切换,包括资源文件的定义,实体对象属性设置,后台代码Controller,IAuthorizationFilter,HtmlHelper的实现,做法比 ...

  4. SSH学习

    简介 SSH或Secure Shell是一种远程管理协议,允许用户通过Internet控制和修改远程服务器.该服务是作为未加密Telnet的安全替代品创建的,它使用加密技术确保与远程服务器之间的所有通 ...

  5. pl/sql to_date

    to_date 函数:TO_DATE( string1 [, format_mask] [, nls_language] ) 后面两个函数为可选 ,意思将字符串类型转换为时间类型 , 可以自定义时间格 ...

  6. windows server 2012/2016 设置多用户远程桌面(转载)

    方案一: 该方案只能满足两个人同时远程. 方案二: https://blog.csdn.net/flyingshuai/article/details/77869279

  7. 我永远爱着OOP——第二单元作业总结

    第二单元的电梯真是愉♂快呢,多线程编程作为java编程OOP中的重要组成部分,通过这一个单元的学习,我也是有了很多全新的认识 那么下面就先例行一下公事 三次作业分析 第五次作业 设计分析 实现的电梯是 ...

  8. 我从来不理解JavaScript闭包,直到有人这样向我解释它...

    摘要: 理解JS闭包. 原文:我从来不理解JavaScript闭包,直到有人这样向我解释它... 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 正如标题所述,JavaScript闭包 ...

  9. vue2.x 下载后台传过来的流文件(excel)后乱码问题

    1.接口返回的流和头部: 2.下载流文件的代码 方法一:是用了插件 https://github.com/kennethjiang/js-file-download 方法二:是用了 blob 不管哪种 ...

  10. ArcFace虹软与Dlib人脸识别对比

    我司最近要做和人脸识别相关的产品,原来使用的是其他的在线平台,识别率和识别速度很满意,但是随着量起来的话,成本也是越来越不能接受(目前该功能我们是免费给用户使用的),而且一旦我们的设备掉线了就无法使用 ...