好题。

ST表又叫做稀疏表,这里利用了他的性质。

显然每一个条件可以分成n个条件,显然过不了。

然后发现有许多状态是重复的,首先考虑线段树,没什么卵用。

然后ST表,可以每一层表示对应的区间大小的两个部分是否合并,如果合并就不向下递归。

然后可以剪去许多状态,变成了$O(nlogn)$的。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std;
#define maxn 100005
#define ll long long
#define md 1000000007
#define F(i,j,k) for (int i=j;i<=k;++i) int f[maxn][21],n,m,l1,r1,l2,r2,lg[maxn]; int gf(int a,int t)
{
if (f[a][t]==a) return a;
else return f[a][t]=gf(f[a][t],t);
} void merge(int a,int b,int t)
{
int fa=gf(a,t),fb=gf(b,t);
if (fa==fb) return ;
f[fa][t]=fb; if (!t) return ;
merge(a,b,t-1);merge(a+(1<<(t-1)),b+(1<<(t-1)),t-1);
} int main()
{
scanf("%d%d",&n,&m);
F(i,2,n) lg[i]=lg[i>>1]+1;
F(i,1,n) F(j,0,lg[n]) f[i][j]=i;
while(m--)
{
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
int tmp=lg[r1-l1+1];merge(l1,l2,tmp);
merge(r1-(1<<tmp)+1,r2-(1<<tmp)+1,tmp);
}
int cnt=0,ans=9;
F(i,1,n) if (f[i][0]==i) cnt++; cnt--;
while(cnt--) {ans=(ll)ans*10%md;}
printf("%d\n",ans);
}

  

BZOJ 4569 [Scoi2016]萌萌哒 ——ST表 并查集的更多相关文章

  1. BZOJ 4569 [Scoi2016]萌萌哒 | ST表 并查集

    传送门 BZOJ 4569 题解 ST表和并查集是我认为最优雅(其实是最好写--)的两个数据结构. 然鹅!他俩加一起的这道题,我却--没有做出来-- 咳咳. 正解是这样的: 类似ST表有\(\log ...

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

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

  3. 【BZOJ-4569】萌萌哒 ST表 + 并查集

    4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 459  Solved: 209[Submit][Status] ...

  4. bzoj 4569 [Scoi2016]萌萌哒 并查集 + ST表

    题目链接 Description 一个长度为\(n\)的大数,用\(S_1S_2S_3...S_n\)表示,其中\(S_i\)表示数的第\(i\)位,\(S_1\)是数的最高位,告诉你一些限制条件,每 ...

  5. bzoj4569: [Scoi2016]萌萌哒(ST表+并查集)

    好喵喵的题 将一个要求用ST表分割成logn个要求,如果把f[i][j]和f[u][v]在同一个集合,那么f[i][j-1]和f[u][v-1],f[i+2^(j-1)][j-1]和f[u][u+2^ ...

  6. bzoj 4569: [Scoi2016]萌萌哒

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

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

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

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

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

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

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

随机推荐

  1. php xdebug扩展无法进入断点问题

    Waiting for incoming connection with ide key 看到这句话就恶心 这两天搞php运行环境搞的头大,好在现在终于调通了,可以正常进入断点了 现在记录一下,避免下 ...

  2. 函数指针 && 指针函数

    bitmap.anim_and_exit((void(*)(void*, int))anim_gpu,(void(*)(void*))anim_exit); 在学习arm过程中发现这“指针函数”与“函 ...

  3. Drupal7新装一个主题时页面白屏,如何设置一个默认主题?

    问题: 请问我不小心退出登陆了 但这个主题没有登录口 而且之前不知道为什么我其他界面都不能显示内容所以 ?q=user 也不行,怎么办呢?看网上说更换默认主题 去variable表里把默认主题换了,我 ...

  4. HTML 5新元素和CSS

    Html5 新元素 多媒体元素 video/audio: 格式例子: 属性: canvas元素 Canvas标签定义图形,用于图形的绘制,使用    js来绘图 拖放drag和drop 拖放是一种常见 ...

  5. Java基础面试操作题:读取该文件内容,并按照自然顺序排序后输出到 另一个文件中

    package com.swift; import java.io.FileInputStream; import java.io.FileNotFoundException; import java ...

  6. 第1 章初识Python

    1.print()—输出 print()函数的基本用法如下: print(输出内容) 其中,输出内容可以是数字和字符串(使用引号括起来),此类内容将直接输出,也可以是包含运算符的表达式,此类内容将计算 ...

  7. vue-cli的build的文件夹下没有dev-server.js文件,怎么配置mock数据

    因为最新版本的vue-cli已经放弃dev-server.js,只需在webpack.dev.conf.js配置就行 新版webpack.dev.conf.js配置如下: 在const portfin ...

  8. goaccess实现实时监控

    一.实现后台实时监控 goaccess -p /usr/local/etc/goaccess/goaccess.conf /var/log/nginx/access.log -a -o /usr/sh ...

  9. swoole 连接池

    proxy_pool.php <?php class ProxyServer { protected $frontends; protected $backends; /** * @var sw ...

  10. Python 正则表达式 贪心匹配和非贪心匹配

    Python的正则表达式默认是“贪心匹配”,即在有第二义的情况下,尽可能匹配最长的字符串,在正则表达式的花括号后面跟上问号,可以变为非贪心模式 >>> >>> ha ...