SCOI 2016 萌萌哒

solution

有点线段树的味道,但是并不是用线段树来做,而是用到另外一个区间修改和查询的利器——ST表

我们可以将一个点拆成\(logN\)个点,分别代表从点\(i\)开始,长度为\(2^k\)的子串 那么当我们处理两个区间相等的关系时,对区间做二进制拆分,拆成\(log\)个区间,分别并起来即可

我们从最长的区间开始逐个枚举,每次查找他和他的父亲,然后把它和父亲都劈成两半,前一半和前一半连边,后一半和后一半连边即可,这样相当于把较长区间并查集拆成两个一半的并查集

#include <cmath>
#include <cstdio>
using namespace std;
int n, m, fa[100005][18], ans;
int find(int x, int k) { return fa[x][k] == x ? x : fa[x][k] = find(fa[x][k], k); }
void join(int x, int y, int k) { if ((x = find(x, k)) != (y = find(y, k))) fa[x][k] = y; }
int main() {
scanf("%d %d", &n, &m);
int maxk = floor(log2(n));
for (int i = 1; i <= n; ++i)
for (int k = 0; k <= maxk; ++k) fa[i][k] = i;
for (int i = 1, l1, r1, l2, r2; i <= m; ++i) {
scanf("%d %d %d %d", &l1, &r1, &l2, &r2);
for (int k = maxk; ~k; --k)
if (l1 + (1 << k) - 1 <= r1)
join(l1, l2, k), l1 += 1 << k, l2 += 1 << k;
}
for (int k = maxk; k; --k)
for (int i = 1; i + (1 << k) - 1 <= n; ++i) {
int pos = find(i, k);
join(i, pos, k - 1);
join(i + (1 << k - 1), pos + (1 << k - 1), k - 1);
}
for (int i = 1; i <= n; ++i)
if (fa[i][0] == i) ans = !ans ? 9 : ans * 10ll % 1000000007;
printf("%d\n", ans);
return 0;
}

SCOI 2016 萌萌哒的更多相关文章

  1. [Luogu P3295][SCOI 2016]萌萌哒

    先说下暴力做法,如果[l1,r1]和[l2,r2]子串相等等价于两个区间内每个数对应相等.那么可以用并查集暴力维护,把对应相等的数的位置维护到同一个集合里去,最后答案其实就是把每个集合可以放的数个数乘 ...

  2. 【BZOJ 4569】【SCOI 2016】萌萌哒

    http://www.lydsy.com/JudgeOnline/problem.php?id=4569 用ST表表示所有区间,根据ST表中表示的区间长度种一棵nlogn的树,类似线段树,每个节点的左 ...

  3. 【BZOJ 4568】【SCOI 2016】幸运数字

    写了一天啊,调了好久,对拍了无数次都拍不出错来(数据生成器太弱了没办法啊). 错误1:把线性基存成结构体,并作为函数计算,最后赋值给调用函数的变量时无疑加大了计算量导致TLE 错误2:像这种函数(A, ...

  4. [SCOI 2016]美味

    Description 题库链接 给你一个长度为 \(n\) 的序列 \(A\) . \(m\) 组询问 \((b,x,l,r)\) 询问 \[\max_{i=l}^r b\oplus (A_i+x) ...

  5. [SCOI 2016]幸运数字

    Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征.一 ...

  6. [SCOI 2016]背单词

    Description Lweb 面对如山的英语单词,陷入了深深的沉思,“我怎么样才能快点学完,然后去玩三国杀呢?”.这时候睿智 的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计 ...

  7. bzoj 4568 [SCOI 2016] 幸运数字

    题目大意 给定一棵\(n\)个点的树,每个点有权值 \(q\)次询问树上路径中 每个点权值可选可不选的最大异或和 \(n\le 2*10^4,q\le 2*10^5,val[i]\le 2^{60}\ ...

  8. 【BZOJ 4572】【SCOI 2016】围棋

    http://www.lydsy.com/JudgeOnline/problem.php?id=4572 轮廓线DP:设\(f(i,j,S,x,y)\). \(S\)表示\((i,1)\)到\((i, ...

  9. 【BZOJ 4571】【SCOI 2016】美味

    http://www.lydsy.com/JudgeOnline/problem.php?id=4571 这道题因为有加法,不能像可持久化trie那样每次判断只判断一个子树,而是在主席树上查询\(\l ...

随机推荐

  1. MAC抓包工具Charles安装及破解

    参考资料:https://juejin.im/post/5c0a430f51882516207d205d 下载 Charles官网下载安装包,下载成功后根据指示安装即可 官网地址:http://www ...

  2. keras搭建神经网络快速入门笔记

    之前学习了tensorflow2.0的小伙伴可能会遇到一些问题,就是在读论文中的代码和一些实战项目往往使用keras+tensorflow1.0搭建, 所以本次和大家一起分享keras如何搭建神经网络 ...

  3. Eureka加了secsecurity后注册失败

    报错信息: com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known ...

  4. 【转载】自动化魔方求解器的Bug——选择合适的色彩空间

    目录 1. 准备工作-- 2. RGB颜色空间 3. LAB色彩空间 4. YCrCb色彩空间 5. HSV色彩空间 Color spaces in OpenCV (C++ / Python) 几天前 ...

  5. (一)JDK安装和使用eclipse输出hello world

    目录 一.jdk安装(推荐使用压缩包安装) 二.使用eclipse输出hello world 一.jdk安装(推荐使用压缩包安装) 1.压缩包安装的优点:若可能同时使用多个jdk版本,切换jdk时只需 ...

  6. 从零开始的Spring Boot(6、Thymeleaf内置对象及表达式大全)

    1.1 基础对象 #ctx:上下文对象 ${#ctx.locale} ${#ctx.variableNames} ${#ctx.request} ${#ctx.response} ${#ctx.ses ...

  7. Python SimpleHTTPServer (python3 -m http.server 6789)

    搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享.但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方便的地方.比如你想快速共享Linux系统的某个目录给整个项目 ...

  8. 看到这些常见的android面试题,你慌了吗?

    最近参加了一些Android工程师岗位的面试,总结了一些常见的考点,希望能帮到正在面试的你(答案还在整理中)! 1.Java调用函数传入实际参数时,是值传递还是引用传递? 2.单例模式的DCL方式,为 ...

  9. GitHub如何回滚代码?

    1.git log 查看commit hash值 执行git log:查看commit hash值. 2.执行git reset --hard xxxx xxxx表示的是commit hash 值. ...

  10. android handle详解2 主线程给子线程发送消息

    按照android handler详解分析的原理我们可以知道,在主线程中创建handle对象的时候,主线程默认创建了一个loop对象使用threalocal函数将loop对象和主线程绑定. 我们能不能 ...