感觉这才算入门题吧。。前面那些线段树练习,改几个字符就过了一定要搞成几道题。。

n<=2e5的数列,给常数K<=2e5,m<=2e5个操作,区间加,问一个区间里K的倍数。

这题空间???当成512MB吧。。n*sqrt(n)开得下

每个块记cnt(x,i)表示第x个块有多少数%K=i,以及整块+标记add(x),然后回答询问时默认一个块里的数都加上了add(x)即可,修改常规。

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 #include<stdlib.h>
 5 #include<math.h>
 6 //#include<iostream>
 7 using namespace std;
 8
 9 int n,m,q,K;
10 #define maxn 200011
11 #define maxm 461
12 int cnt[maxm][maxn],a[maxn],bel[maxn],tot,add[maxm];
13 void modify(int x,int y,int v)
14 {
15     if (bel[x]==bel[y])
16         for (int i=x;i<=y;i++) cnt[bel[i]][a[i]]--,a[i]+=v,a[i]%=K,cnt[bel[i]][a[i]]++;
17     else
18     {
19         for (int i=bel[x]+1;i<bel[y];i++) add[i]+=v,add[i]%=K;
20         for (int i=x;bel[i]==bel[x];i++) cnt[bel[i]][a[i]]--,a[i]+=v,a[i]%=K,cnt[bel[i]][a[i]]++;
21         for (int i=y;bel[i]==bel[y];i--) cnt[bel[i]][a[i]]--,a[i]+=v,a[i]%=K,cnt[bel[i]][a[i]]++;
22     }
23 }
24 int query(int x,int y)
25 {
26     int ans=0;
27     if (bel[x]==bel[y])
28         for (int i=x;i<=y;i++) ans+=(a[i]+add[bel[i]]==0 || a[i]+add[bel[i]]==K);
29     else
30     {
31         for (int i=bel[x]+1;i<bel[y];i++) ans+=cnt[i][add[i]?K-add[i]:0];
32         for (int i=x;bel[x]==bel[i];i++) ans+=(a[i]+add[bel[i]]==0 || a[i]+add[bel[i]]==K);
33         for (int i=y;bel[y]==bel[i];i--) ans+=(a[i]+add[bel[i]]==0 || a[i]+add[bel[i]]==K);
34     }
35     return ans;
36 }
37
38 bool isdigit(char c) {return c>='0' && c<='9';}
39 int qread()
40 {
41     char c;int s=0;while (!isdigit(c=getchar()));
42     do s=s*10+c-'0'; while (isdigit(c=getchar())); return s;
43 }
44 int main()
45 {
46     n=qread(),q=qread(),K=qread();
47     m=(int)sqrt(n);
48     for (int i=1;i<=n;i++) bel[i]=(i-1)/m+1;
49     tot=bel[n];
50
51     for (int i=1;i<=n;i++)
52     {
53         a[i]=qread()%K;
54         cnt[bel[i]][a[i]]++;
55     }
56
57     char c;
58     for (int i=1,x,y,z;i<=q;i++)
59     {
60         while (!((c=getchar())>='a' && c<='z'));
61         if (c=='a')
62         {
63             x=qread(),y=qread(),z=qread();
64             modify(x,y,z);
65         }
66         else
67         {
68             x=qread(),y=qread();
69             printf("%d\n",query(x,y));
70         }
71         while (c>='a' && c<='z') c=getchar();
72     }
73     return 0;
74 }

View Code

转载于:https://www.cnblogs.com/Blue233333/p/8027466.html

分块试水--CODEVS5037 线段树练习4加强版相关推荐

  1. 分块试水--CODEVS4927 线段树练习5

    模板 1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 #include<st ...

  2. CODEVS.5037.线段树练习4加强版(分块 区间k的倍数)

    题目链接 /* 如果用线段树,每个节点要再开k的空间,显然不行.但是分块可以(虽然空间依旧爆炸)分块.用bloans[i][j]表示 第i块 模k为j 的有多少个 对于不是整块的,查询时应判断 A[i ...

  3. 51NOD 1287 加农炮(不水的线段树)

    >>点击进入原题测试<< Input示例 9 11 1 2 0 4 3 2 1 5 7 2 8 0 7 6 5 3 4 5 6 5 Output示例 2 2 2 4 3 3 5 ...

  4. NEFU 1266 快乐的雨季 (线段树)

    题意: 中文 思路: 线段树基础题当然亦可以分块做 代码: 线段树: #include <bits/stdc++.h> using namespace std; #define ls l, ...

  5. 【线段树】2019雅礼集训 sequence

    题目: 给出k,和一个长度为n的序列A 有q次询问, 每次询问Al,Al+1,Al+2--,ArA_l,A_{l+1},A_{l+2}--,A_{r}Al​,Al+1​,Al+2​--,Ar​中,有多 ...

  6. 1355 巧克力 (线段树点+区间)

    继续最水的线段树  简单粗暴 #include<cstdio> #include<cstring> #include<algorithm> #define lc p ...

  7. 2019长沙学院新生赛(A水,B水,C(整除分块),D水,E(巧数学),F(二分+bfs),H(换根dp),I(线段树)J(dp+倍增+lca))

    A-XOR SUM 通过简单观察得知连续四个数的异或值就是等于0,暴力找出左区间和右区间就可以了,最多跑四个单位 0^1^2^3==0   4^5^6^7=0 #include<bits/std ...

  8. LibreOJ 6277,6278,6280 数列分块入门1,2,4 树状数组,分块,线段树等.

    分块1 分块2 分块4 模板一共有九个.我试着在三天内做了3个. 应该不用超链接吧. 分块1 区间加,单点询问. 这不是裸的改版树状数组吗?用树状数组处理前缀和水过. #include<bits ...

  9. 【YBT2023寒假Day4 C】樱桃莓莓(交互)(四毛子分块)(线段树)

    樱桃莓莓 题目链接:YBT2023寒假Day4 C 题目大意 有一个黑盒操作满足交换律和结合律,有 n 个数,q 次询问,每次选 m 个下标,你要计算所有不包含那 m 个下标的数进行黑盒操作之后的结果 ...

最新文章

  1. js数组的声明与应用
  2. python编程入门与实践_Python编程入门到实践(二)
  3. 在vue-cli中搭建mock服务器
  4. 基于dreamweaver软件设计和开发一网站_基于 abp vNext 和 .NET Core 开发博客项目 Blazor 实战系列(一)...
  5. 先富带动后富:雷军带领一大批程序员发家致富
  6. java反编译源码_java反编译获取源码
  7. 5 天 6 亿 3000 万数据泄露,怎么做才能跑赢骗子?
  8. scala设计模式_Scala中的工厂设计模式
  9. 浏览器了解(四)javascript解析
  10. ASP.NET中 TextBox控件使用 ReadOnly=true 属性
  11. 制造行业IT运维管理解决方案
  12. 凸优化中:单纯形是一种多面体的证明
  13. python地图匹配的步骤_地图匹配算法实践
  14. 微信小程序--引用外部字体(云开发实现)
  15. 因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配
  16. 手机时钟软件推荐,创意时钟APP介绍
  17. ADP(自适应动态规划)-HDP
  18. 微信小程序-电影app程序遇到得问题
  19. 阿里云服务器操作系统有哪些?如何选择?
  20. 编写自己的聊天网站(一)

热门文章

  1. win10开启telnet客户端
  2. Golang管道channel:管道的声明 读取 写入
  3. ansible roles角色(模块化)详解
  4. Python Django 查询数据缓存
  5. eureka客户端获取服务列表时间间隔配置
  6. Selenium自动写公众号文章
  7. centos7 开机延迟几分钟后自启动
  8. ksql 数量大于2_A股史上唯一能暴涨200%的买卖铁则:内盘大于外盘股价必跌,外盘大于内盘股价必涨,堪称绝技...
  9. 魅族怎么查看内存linux,这就是魅族超级旗舰:看燃
  10. vue中页面跳转传值_vue跳转方式(打开新页面)及传参操作示例