链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2054

线段树写法:

点的颜色只取决于最后一次染的颜色,所以我们可以倒着维护,如果当前区间之前被染过了,就不用再染了,对区间染色我们可以暴力在线段树上进行更新,并用线段树维护下那些区间已经被染色了,被染色的区间更新的时候直接跳过,这样可以节省很多时间。

实现代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define lson l,m,rt<<1
  4. #define rson m+1,r,rt<<1|1
  5. #define mid int m = (l + r) >> 1
  6. const int M = 1e6 + ;
  7. int sum[M<<];
  8.  
  9. void pushup(int rt){
  10. sum[rt] = sum[rt<<]&&sum[rt<<|];
  11. }
  12.  
  13. void update(int L,int R,int c,int l,int r,int rt){
  14. if(sum[rt]) return ;
  15. if(l == r){
  16. sum[rt] = c;
  17. return ;
  18. }
  19. mid;
  20. if(L <= m) update(L,R,c,lson);
  21. if(R > m) update(L,R,c,rson);
  22. pushup(rt);
  23. }
  24.  
  25. void ct(int l,int r,int rt){
  26. if(l == r){
  27. printf("%d\n",sum[rt]);
  28. return ;
  29. }
  30. mid;
  31. ct(lson); ct(rson);
  32. }
  33.  
  34. int main()
  35. {
  36. int n,m,p,q;
  37. scanf("%d%d%d%d",&n,&m,&p,&q);
  38. for(int i = m;i >= ;i --){
  39. int x = ((i*p+q)%n)+;
  40. int y = ((i*q+p)%n)+;
  41. if(x > y) swap(x,y);
  42. update(x,y,i,,n,);
  43. }
  44. ct(,n,);
  45. }

并查集写法:

和线段树的思路一样,我们需要快速跳过已染色区间,这里用并查集维护已染色的区间,区间更新时可以利用并查集快跳过被染色的区间。

实现代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int M = 1e6+;
  4. int ans[M],f[M];
  5. int Find(int x){
  6. if(x == f[x]) return x;
  7. return f[x] = Find(f[x]);
  8. }
  9.  
  10. int main()
  11. {
  12. int n,m,p,q;
  13. scanf("%d%d%d%d",&n,&m,&p,&q);
  14. for(int i = ;i <= n+;i ++) f[i] = i;
  15. for(int i = m;i >= ;i --){
  16. int x = ((i*p+q)%n)+,y = ((i*q+p)%n)+;
  17. if(x > y) swap(x,y);
  18. for(int j = Find(x);j <= y;j = Find(j+)){
  19. f[j] = Find(j+); ans[j] = i;
  20. }
  21. }
  22. for(int i = ;i <= n;i ++)
  23. printf("%d\n",ans[i]);
  24. return ;
  25. }

bzoj 2054: 疯狂的馒头(线段树||并查集)的更多相关文章

  1. 【BZOJ 4662】 4662: Snow (线段树+并查集)

    4662: Snow Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 136  Solved: 47 Description 2333年的某一天,临冬突 ...

  2. [WC2005]双面棋盘(线段树+并查集)

    线段树+并查集维护连通性. 好像 \(700ms\) 的时限把我的常数超级大的做法卡掉了, 必须要开 \(O_2\) 才行. 对于线段树的每一个结点都开左边的并查集,右边的并查集,然后合并. \(Co ...

  3. 2022.02.27 CF811E Vladik and Entertaining Flags(线段树+并查集)

    2022.02.27 CF811E Vladik and Entertaining Flags(线段树+并查集) https://www.luogu.com.cn/problem/CF811E Ste ...

  4. BZOJ.2054.疯狂的馒头(并查集)

    BZOJ 倒序处理,就是并查集傻题了.. 并查集就是确定下一个未染色位置的,直接跳到那个位置染.然而我越想越麻烦=-= 以为有线性的做法,发现还是要并查集.. 数据随机线段树也能过去. //18400 ...

  5. bzoj2054疯狂的馒头——线段树

    中文题面,一排有n个馒头,用刷子把整个连续的区间刷成一种颜色.因为颜色会覆盖掉之前的.所以我们可以用线段树来反着处理.如果这段区间之前刷到过就不要再遍历进去了,因为这次已经被上次刷的颜色给覆盖了.最后 ...

  6. Luogu P2391 白雪皑皑 && BZOJ 2054: 疯狂的馒头 并查集

    4月的时候在luogu上做过 白雪皑皑 这道题,当时一遍AC可高兴了qwq,后来去了个厕所,路上忽然发现自己的做法是错的qwq...然后就咕咕了qwq 今天看到了 疯狂的馒头 ,发现一毛一样OvO.. ...

  7. [BZOJ 3123] [SDOI 2013]森林(可持久化线段树+并查集+启发式合并)

    [BZOJ 3123] [SDOI 2013]森林(可持久化线段树+启发式合并) 题面 给出一个n个节点m条边的森林,每个节点都有一个权值.有两种操作: Q x y k查询点x到点y路径上所有的权值中 ...

  8. BZOJ 2733 [HNOI2012]永无乡 ——线段树 并查集

    用并查集维护联通块. 用线段树的合并来合并联通块. 自己YY了一个写法. #include <map> #include <cmath> #include <queue& ...

  9. BZOJ 1453 (线段树+并查集)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1453 题意:一个 n*n 的矩阵,每个位置有黑/白两种颜色,有 m 次操作,每次可以翻转 ...

随机推荐

  1. ubuntu 添加开机启动服务

    新建umpserver.service [Unit] Description=UMPServer After=syslog.target network.target remote-fs.target ...

  2. Python云端系统开发入门 pycharm代码

    html <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title& ...

  3. B-Tree 和 B+Tree

    B-Tree和B+Tree 本文来自 Hubery_James 的CSDN 博客 ,全文地址请点击:原文地址-干货满满 B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索 ...

  4. js基础语法之函数

    普通函数 function foo(a, b){ return a + b; } foo(10, 20) >>> 30 匿名函数 var f = function(){console ...

  5. Java ME Technology - CDC(Connected Device Configuration)

    Java ME Technology - CDChttps://www.oracle.com/technetwork/java/javame/tech/index-jsp-139293.html Ne ...

  6. 三、如何设置npm镜像

    一.临时使用 npm --registry https://registry.npm.taobao.org install express 二.永久使用 npm config set registry ...

  7. react render

    实际上react render方法返回一个虚拟dom 并没有去执行渲染dom 渲染的过程是交给react 去完成的 这就说明了为什么要在所有数据请求完成后才去实现render 这样做也提高了性能.只调 ...

  8. h5简易手写板

    ............. 我该说点什么呢,开头居然不知道想说点什么!好吧不知道说什么,我们就来说说这个手写板吧,虽然这个手写板现在没什么用,但是.....,好像的确没什么用啊! 只是存粹哪里练手的的 ...

  9. spring 给一个类 生成test

    右击一个类,然后:GoTo==>test ,就可以新建这个类的测试用例了,简单粗暴, 如果想要不污染数据库,就在一个测试用例 的标签@Test 下面在加上@RollBack 这样: @Test ...

  10. vue & iview

    vue & iview ui components https://codepen.io/webgeeker/pen/EJmQxQ https://www.iviewui.com/docs/g ...