pushdown的addtag[x]打成addtag[i],结果WA了一次

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <cstring>
  5. using namespace std;
  6. const int MOD = 10007;
  7. int belong[100100],tagadd[100100],tagmul[100100],a[100100],sz,blocknum,n;
  8. void calbe(int n){
  9. for(int i=1;i<=n;i++)
  10. belong[i]=(i-1)/sz+1;
  11. }
  12. void pushdown(int x){
  13. for(int i=sz*(x-1)+1;i<=min(sz*x,n);i++)
  14. a[i]=((long long)a[i]%MOD*tagmul[x]%MOD+tagadd[x]%MOD)%MOD;
  15. tagmul[x]=1;
  16. tagadd[x]=0;
  17. }
  18. void add(int l,int r,int c){
  19. int lsx=belong[l];
  20. int rex=belong[r];
  21. pushdown(lsx);
  22. for(int i=l;i<=min(lsx*sz,r);i++){
  23. a[i]=(a[i]%MOD+c%MOD)%MOD;
  24. }
  25. if(lsx!=rex){
  26. pushdown(rex);
  27. for(int i=(rex-1)*sz+1;i<=r;i++)
  28. a[i]=(a[i]%MOD+c%MOD)%MOD;
  29. for(int i=lsx+1;i<=rex-1;i++)
  30. tagadd[i]=(tagadd[i]%MOD+c%MOD)%MOD;
  31. }
  32. }
  33. void mul(int l,int r,int c){
  34. int lsx=belong[l];
  35. int rex=belong[r];
  36. pushdown(lsx);
  37. for(int i=l;i<=min(lsx*sz,r);i++)
  38. a[i]=((long long)a[i]%MOD*c%MOD)%MOD;
  39. if(lsx!=rex){
  40. pushdown(rex);
  41. for(int i=(rex-1)*sz+1;i<=r;i++)
  42. a[i]=((long long)a[i]%MOD*c%MOD)%MOD;
  43. for(int i=lsx+1;i<=rex-1;i++){
  44. tagadd[i]=((long long)tagadd[i]%MOD*c%MOD)%MOD;
  45. tagmul[i]=((long long)tagmul[i]%MOD*c%MOD)%MOD;
  46. }
  47. }
  48. }
  49. int query(int r){
  50. return ((long long)a[r]%MOD*tagmul[belong[r]]%MOD+tagadd[belong[r]]%MOD)%MOD;
  51. }
  52. int main(){
  53. // freopen("a5.in","r",stdin);
  54. // freopen("test.out","w",stdout);
  55. scanf("%lld",&n);
  56. for(int i=1;i<=n;i++)
  57. scanf("%d",&a[i]);
  58. sz=sqrt(n);
  59. blocknum=n/sz;
  60. if(n%sz)
  61. blocknum++;
  62. calbe(n);
  63. for(int i=1;i<=blocknum;i++)
  64. tagmul[i]=1,tagadd[i]=0;
  65. for(int i=1;i<=n;i++){
  66. int opt,l,r,c;
  67. scanf("%d %d %d %d",&opt,&l,&r,&c);
  68. if(opt==0)
  69. add(l,r,c);
  70. else if(opt==1)
  71. mul(l,r,c);
  72. else
  73. printf("%d\n",query(r));
  74. }
  75. return 0;
  76. }

LOJ6283 数列分块入门7(分块)的更多相关文章

  1. LibreOJ 6277 数列分块入门 1(分块)

    题解:感谢hzwer学长和loj让本蒟蒻能够找到如此合适的入门题做. 这是一道非常标准的分块模板题,本来用打标记的线段树不知道要写多少行,但是分块只有这么几行,极其高妙. 代码如下: #include ...

  2. [Libre 6281] 数列分块入门 5 (分块)

    水一道入门分块qwq 题面:传送门 开方基本暴力.. 如果某一个区间全部都开成1或0就打上标记全部跳过就行了 因为一个数开上个四五六次就是1了所以复杂度能过233~ code: //By Menteu ...

  3. LibreOJ 6280 数列分块入门 4(分块区间加区间求和)

    题解:分块的区间求和比起线段树来说实在是太好写了(当然,复杂度也高)但这也是没办法的事情嘛.总之50000的数据跑了75ms左右还是挺优越的. 比起单点询问来说,区间询问和也没有复杂多少,多开一个su ...

  4. LibreOJ 6278 数列分块入门 2(分块)

     题解:非常高妙的分块,每个块对应一个桶,桶内元素全部sort过,加值时,对于零散块O(sqrt(n))暴力修改,然后暴力重构桶.对于大块直接整块加.查询时对于非完整块O(sqrt(n))暴力遍历.对 ...

  5. LOJ.6284.数列分块入门8(分块)

    题目链接 \(Description\) 给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c. \(Solution\) 模拟一些数据可以发现,询问后 ...

  6. LOJ.6281.数列分块入门5(分块 区间开方)

    题目链接 int内的数(也不非得是int)最多开方4.5次就变成1了,所以还不是1就暴力,是1就直接跳过. #include <cmath> #include <cstdio> ...

  7. LibreOJ 6281 数列分块入门 5(分块区间开方区间求和)

    题解:区间开方emmm,这马上让我想起了当时写线段树的时候,很显然,对于一个在2^31次方以内的数,开方7-8次就差不多变成一了,所以我们对于每次开方,如果块中的所有数都为一了,那么开方也没有必要了. ...

  8. LibreOJ 6279 数列分块入门 3(分块+排序)

    题解:自然是先分一波块,把同一个块中的所有数字压到一个vector中,将每一个vector进行排序.然后对于每一次区间加,不完整的块加好后暴力重构,完整的块直接修改标记.查询时不完整的块暴力找最接近x ...

  9. [Libre 6282] 数列分块入门 6 (分块)

    原题:传送门 code: //By Menteur_Hxy #include<cstdio> #include<iostream> #include<algorithm& ...

  10. LOJ-6279-数列分块入门3(分块, 二分)

    链接: https://loj.ac/problem/6279 题意: 给出一个长为 的数列,以及 个操作,操作涉及区间加法,询问区间内小于某个值 的前驱(比其小的最大元素). 思路: 同样的分块加二 ...

随机推荐

  1. ReactiveCocoa(I)

    ReactiveCocoa常见类 1. RAC中最核心的类RACSiganl: RACSiganl:信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据 解析: 信号类 ...

  2. 【Hbase学习之四】Hbase表设计案例

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-2.6.5 hbase-0.98.12.1-h ...

  3. django 集合

    1,前言 socket 位于应用层和传输层之间的一个抽象层,它是一个接口. 百度的服务器(socket服务端) . 启动socket . 绑定ip和端口 . 监听 . 接收数据 . 发送数据 . 断开 ...

  4. vue组件通信之任意级组件之间的通信

    <div id="app"> <comp1></comp1> <comp2></comp2> </div> ...

  5. hdu 1466 计算直线的交点数 递推

    题目描述 平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数. 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行). 输入 输入数据包含多个测试实例,每个测试实例占一行,每行包 ...

  6. Ubuntu 为 root 帐号开启 SSH 登录

    1. 修改 root 密码sudo passwd root 2. 以其他账户登录,通过 sudo nano 修改 /etc/ssh/sshd_config :xxx@ubuntu:~$ su - ro ...

  7. linux OS与SQL修改时区,系统时间

    linux修改系统时间和linux查看时区.修改时区的方法 一.查看和修改Linux的时区 1. 查看当前时区命令 : "date -R" 2. 修改设置Linux服务器时区方法 ...

  8. php_study progress(1)

    PHP是一种语法简单.功能强大的网络编程语言.在语法格式上,PHP借鉴了广泛流行的C.Java和Perl等编程语言的特点,非常类似于C语言,但比C语言更简单,易学和易用,因此特别适合于学习过C语言,有 ...

  9. ACM总结——2017湖南省省赛总结

    2017省赛已经结束了2天了,今天终于有时间,也有勇气来写下这一篇总结.的确,这是我第一次正式的ACM线下赛,我本以为再不济,也可以拿个三等奖,没想到,实力打铁.确实对我打击比较大,以前的确是知道自己 ...

  10. Google's Machine Learning Crash Course #04# First Steps with TensorFlow

    1.使用 TensorFlow 的建议 Which API(s) should you use? You should use the highest level of abstraction tha ...