题目链接

/*
如果用线段树,每个节点要再开k的空间,显然不行。但是分块可以(虽然空间依旧爆炸)分块。用bloans[i][j]表示 第i块 模k为j 的有多少个
对于不是整块的,查询时应判断 A[i]+tag[belong[i]] ==k || ==0
对于整块,维护两个tag,一个是整块的加标记,另一个是整块的mod数标记tag2,初始时tag2为0
当整块+v时,tag2 -=v。因为查询的应是 模k=0 的数的个数,整块+v后,这块要查的就是 模k=k-v ((k-v+v)%k=0)的个数
这样就很巧妙地将整块加变成了改询问
*/
#include<cmath>
#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
const int N=2e5+5,MAXSZ=460;int n,m,k,size,A[N],belong[N],bloans[MAXSZ][N],tag[MAXSZ],tag2[MAXSZ];inline int read()
{int now=0,f=1;register char c=getchar();for(;!isdigit(c);c=getchar())if(c=='-') f=-1;for(;isdigit(c);now=now*10+c-'0',c=getchar());return now*f;
}void Update(int p,int v)
{--bloans[belong[p]][A[p]];A[p]+=v;if(A[p]>=k) A[p]-=k;++bloans[belong[p]][A[p]];
}
void Add(int l,int r,int v)
{int t=min(r,belong[l]*size);for(int i=l; i<=t; ++i)Update(i,v);if(belong[l]!=belong[r])for(int i=(belong[r]-1)*size+1; i<=r; ++i)Update(i,v);for(int i=belong[l]+1; i<belong[r]; ++i){tag[i]+=v, tag2[i]-=v;if(tag[i]>=k) tag[i]-=k;if(tag2[i]<0) tag2[i]+=k;}
}
int Query(int l,int r)
{int res=0, t=min(r,belong[l]*size);for(int i=l; i<=t; ++i)if(A[i]+tag[belong[l]]==k || !(A[i]+tag[belong[l]]))++res;if(belong[l]!=belong[r])for(int i=(belong[r]-1)*size+1; i<=r; ++i)if(A[i]+tag[belong[r]]==k || !(A[i]+tag[belong[r]]))//beblong[l] belong[r]别写反了 ++res;for(int i=belong[l]+1; i<belong[r]; ++i)res+=bloans[i][tag2[i]];return res;
}int main()
{n=read(),m=read(),k=read();size=sqrt(n);for(int i=1;i<=n;++i){A[i]=read()%k, belong[i]=(i-1)/size+1;if(A[i]<0) A[i]+=k;++bloans[belong[i]][A[i]];}char opt[9];int l,r,v;while(m--){scanf("%s",opt);l=read(),r=read();if(opt[0]=='a')v=read(), Add(l,r,(v%k+k)%k);elseprintf("%d\n",Query(l,r));}return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/8435078.html

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

  1. [Codevs] 1082 线段树练习3

    1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的 ...

  2. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  3. 线段树模板题3:区间染色问题

    1.3线段树模板题3:区间染色问题 在DotA游戏中,帕吉的肉钩实际上是大多数英雄中最恐怖的东西.挂钩由长度相同的几个连续的金属棍组成. 现在,帕吉(Pudge)希望对挂接进行一些操作. 让我们将钩子 ...

  4. [Codevs] 1081 线段树练习 2 ----“分块!”

    1081 线段树练习 2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所 ...

  5. 分块试水--CODEVS5037 线段树练习4加强版

    感觉这才算入门题吧..前面那些线段树练习,改几个字符就过了一定要搞成几道题.. n<=2e5的数列,给常数K<=2e5,m<=2e5个操作,区间加,问一个区间里K的倍数. 这题空间? ...

  6. CodeVS 1081 线段树练习 2

    1081 线段树练习 2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所 ...

  7. codevs 4927 线段树练习5 线段树基本操作模板

    4927 线段树练习5  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 有n个数和5种操作 add a b c:把区间[a,b ...

  8. szu 寒训个人复习第一天 线段树入门单点修改,区间修改,以及线段树的扩展运用[线段树+dp][区间最大公约数]

    寒讯内容有点过多(其实是我太菜了)水一波怕忘了(人老了)**什么是线段树** 线段树是本蒟蒻感觉用处特别大的算法 那么线段树上面的节点表示什么意思呢? 线段树,上面的节点表示一个区间,父亲节点表示的区 ...

  9. NYOJ 1068 ST(线段树之 成段更新+区间求和)

    ST 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 "麻雀"lengdan用随机数生成了后台数据,但是笨笨的他被妹纸的问题给难住了... 已知len ...

最新文章

  1. 第八章 异常控制流 笔记
  2. mysql random_Mysql中随机函数笔记
  3. 2.3系列系统中不支持SimpleDateFormat作字段被序列化
  4. CentOS7的firewall和安装iptables
  5. 图解Oracle RMAN备份入门
  6. [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS | BFS)
  7. 【JS 逆向百例】W店UA,OB反混淆,抓包替换CORS跨域错误分析
  8. Intel 收购计算机视觉开发公司 Itseez
  9. centos7 网卡配置vlan_centos 7 下多网卡绑定+ vlan 网卡配置
  10. Linux学习总结(55)——Linux 运维常用脚本
  11. python自动化办公-Python自动化办公室(1),python,一
  12. [渝粤教育] 中国地质大学 运筹学1 复习题
  13. 计算机相关专业的,快毕业时要不要参加培训机构培训班?
  14. 易企秀 伪静态 linux,最新仿易企秀V15.1完整版开源版源码分享,修复采集功能,新增同行站模板采集功能等等...
  15. 阿里acp认证是什么?阿里acp考试内容是什么?
  16. Simulink如何添加模块到Library Browser
  17. C# 操作Excel数据透视表详解 – 创建、操作和删除
  18. 做外贸用什么邮箱,外贸邮箱用哪个好
  19. Web 安全恩仇录:漏洞原理
  20. 16S扩增子分析专题研讨论会——背景介绍

热门文章

  1. mysql导出txt到client_mysql导出导入txt以及sftp自动下载(一)
  2. mysql数据库2013_MySQL数据库备份(2)2013-6-13
  3. mysql中非主键不能自增吗_mysql非主键自增长用法实例分析
  4. rpm安装的mysql如何数据迁移_linux下mysql数据库的rpm安装步骤及常见问题的解决
  5. 使用Maven管理的项目,如何设置Context Root
  6. mysql置疑原因_SQLSERVER数据库经常置疑的原因
  7. 图片怎么等比缩放_mac图像缩放工具Teorex iResizer
  8. 计算机专业核心技术,计算机系多媒体核心技术实验室建设专业方案(10页)-原创力文档...
  9. cd rw 多少次_程序员:想知道你每天按了多少次键盘吗?
  10. Pytorch详解NLLLoss和CrossEntropyLoss、以及softmax和log_softmax