Time:2016.08.03
Author:xiaoyimi
转载注明出处谢谢


传送门
思路:
sunshine爷模拟题之一
自认计数类问题还可以的我找了半天规律也只会50分做法:
对于每个询问直接枚举修改,并查集维护,复杂度O(nm)O(nm)

“有没有能够快速维护多个并查集的数据结构啊”——Yveh
因而正解就是ST表维护并查集
每次合并是自顶而下的,一直下放直到当前要合并的两部分已被合并过。
复杂度最多是神奇的O(mlogn)O(mlogn)
答案就是9∗10集合数−19*10^{集合数-1}
Orz YJQ SC省选时现场AK
注意:n=1时答案为10
代码:

#include<cstdio>
#include<iostream>
#include<cmath>
#define M 100001
#define mo 1000000007
#define LL long long
using namespace std;
int n,m,l1,l2,r1,r2;
int fa[17][M];
bool vis[M];
int in()
{int t=0;char ch=getchar();while (ch<'0'||ch>'9') ch=getchar();while (ch>='0'&&ch<='9') t=(t<<3)+(t<<1)+ch-48,ch=getchar();return t;
}
int find(int x,int y)
{if (fa[x][y]!=y)fa[x][y]=find(x,fa[x][y]);return fa[x][y];
}
void unions(int x,int y,int p)
{int f1=find(p,x),f2=find(p,y);if (f1==f2) return;fa[p][f1]=f2;if (!p) return;p--;unions(x,y,p);unions(x+(1<<p),y+(1<<p),p);
}
int qr(int x,int y)
{int t=1;for (;y;x=(LL)x*x%mo,y>>=1)if (y&1) t=(LL)t*x%mo;return t;
}
main()
{n=in();m=in();if (n==1) return printf("10"),0;for (int i=1;i<=n;i++)for (int j=0;i+(1<<j)-1<=n;j++)fa[j][i]=i;while (m--){l1=in();r1=in();l2=in();r2=in();int t=log2(r1-l1+1);unions(l1,l2,t);unions(r1-(1<<t)+1,r2-(1<<t)+1,t);}int ans=-1;for (int i=1;i<=n;i++)if (!vis[find(0,i)]) vis[fa[0][i]]=1,ans++;printf("%d",9*qr(10,ans)%mo);
}

【BZOJ4569】萌萌哒,ST表+并查集相关推荐

  1. P3295-[SCOI2016]萌萌哒【ST表,并查集】

    正题 题目链接:https://www.luogu.com.cn/problem/P3295 题目大意 一个nnn位的数字,mmm个条件给出两个完全相同的区间,求可能的数字数量. 解题思路 其实就是区 ...

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

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

  3. 牛客多校8 - All-Star Game(线段树分治+并查集按秩合并的撤销操作)

    题目链接:点击查看 题目大意:有 n 个球员和 m 个球迷,一个球员可能是多个球迷的粉丝,需要选择最少的球员进行比赛,使得所有的球迷都愿意观看(对于每个球迷来说,都有至少一个其喜欢的球员入选比赛) 对 ...

  4. BZOJ 4736 温暖会指引我们前行 LCT+最优生成树+并查集

    题目链接:http://uoj.ac/problem/274 题意概述: 没什么好概述的......概述了题意就知道怎么做了......我懒嘛 分析: 就是用lct维护最大生成树. 然后如果去UOJ上 ...

  5. bzoj4569 [Scoi2016]萌萌哒 并查集+st表

    这个题非常巧妙,它描述了一种新的延迟标记关系.. 正常的线段树是用n*4的空间描述一个序列,所以对于一段区间,有可能会有log个点对应一个点 而线段树是利用尽量小的空间使查询变为log st表是nlo ...

  6. NOIp 数据结构专题总结 (1):STL、堆、并查集、ST表、Hash表

    系列索引: NOIp 数据结构专题总结 (1) NOIp 数据结构专题总结 (2) STL structure std::vector #include <vector> std::vec ...

  7. 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...

    度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...

  8. 基础数据结构(二):字典树、并查集、堆、哈希表、字符串的哈希方式、STL的常见容器及其接口

    文章目录 一.字典树Trie 1 原理 2 Trie字符串统计 3 [LeetCode 208. 实现 Trie (前缀树)](https://leetcode-cn.com/problems/imp ...

  9. 算法笔记(三)特殊数据结构——哈希表、有序表、并查集、KMP、Manacher、单调栈、位图、大数据类题

    layout: post title: 算法笔记(三)特殊数据结构--哈希表.有序表.并查集.KMP.Manacher.单调栈.位图.大数据类题 description: 算法笔记(三)特殊数据结构- ...

最新文章

  1. python生成一段时间
  2. 干货丨从线性回归到无监督学习,数据科学家需要掌握的十大统计技术
  3. 英语对计算机人才的重要性,英语对计算机专业的重要性及如何提高英语水平
  4. golang beego安装及入门示例
  5. try_catch_异常处理的第二种方式,自己处理异常
  6. bitmap与memoryStream转换bug
  7. 在JAX-RS中使用@Context [第1部分]
  8. form表单用js提前执行函数若不成功则不提交_面试必会的重复提交 8 种解决方案!...
  9. 40岁的程序员还能找到工作吗_学会了Vue就能找到前端工作吗
  10. github 上 Fork 别人的项目后的常用的操作指南
  11. 记一次使用 vue-admin-template 的优化历程
  12. vue 检测ie版本_vue 兼容低版本ie浏览器
  13. CentOS 7.6环境设置Redis开机自启动
  14. 美服fgo显示服务器异常,FGO日服美服错误代码合集_FGO日服美服错误代码汇总_牛游戏网...
  15. HBase的rowKey设计技巧
  16. java面试-多线程常见面试题
  17. 面试题目之:说出至少4种vue当中的指令和它的用法?
  18. 数字图像处理大作业实验报告
  19. 简述c语言中break的作用,c语言break什么意思?
  20. 秒杀限制人群,如何设计秒杀服务的限流策略?

热门文章

  1. 华为云ModelArts图深度学习,学习知识还能考取微认证
  2. 大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作
  3. java猜拳游戏代码_猜拳游戏 - java代码库 - 云代码
  4. 相机内参_相机标定(张正友标定算法)解读与实战一
  5. Spark之StructuredStreaming
  6. 外国人怎么看祖冲之量子计算机,我国“祖冲之号”量子计算机再次刷新纪录:1.2 小时完成超算 8 年计算量...
  7. mysql 创建函数_MySQL文件及目录权限设置分析-爱可生
  8. 弹簧触摸开关原理图_电梯弹簧抱闸调整
  9. 【Spark】Spark应用执行机制
  10. python文件のpandas操作