原题:https://loj.ac/problem/6280

题解:这题不太难,分块求区间和就行了。

#include<bits/stdc++.h>
#define reg register
#define N 50001
#define M 300
#define ll long long
using namespace std;
int a[N],pos[N],n,m,s[M];
ll sum[M];
inline int rd(){int x=0;int f=1;char s=getchar();while(s>'9' || s<'0') f=(f=='-'?-1:f),s=getchar();while(s>='0' && s<='9') x=(x<<1)+(x<<3)+s-'0',s=getchar();return x*f;
}inline int val(int x) {return a[x]+s[pos[x]];}
inline void add(int l,int r,ll c){for(reg int i=l;i<=min(r,pos[l]*m);i++) a[i]+=c,sum[pos[i]]+=c;if(pos[l]!=pos[r]){for(reg int i=(pos[r]-1)*m+1;i<=r;i++) a[i]+=c,sum[pos[i]]+=c;} for(reg int i=pos[l]+1;i<=pos[r]-1;i++) sum[i]+=1ll*m*c,s[i]+=c;
}inline ll query(int l,int r,ll c){ll ans=0;for(reg int i=l;i<=min(r,pos[l]*m);i++) ans=(ans+val(i))%c;if(pos[l]!=pos[r])for(reg int i=(pos[r]-1)*m+1;i<=r;i++) ans=(ans+val(i))%c;for(reg int i=pos[l]+1;i<=pos[r]-1;i++) ans=(ans+sum[i])%c; return ans%c;
}
int main(){
//  freopen("input.in","r",stdin);n=rd();m=sqrt(n);for(reg int i=1;i<=n;i++) a[i]=rd(),pos[i]=(i-1)/m+1,sum[pos[i]]+=1ll*a[i];for(reg int i=1,opt,l,r,c;i<=n;i++){opt=rd();l=rd();r=rd();c=rd();if(opt==0) add(l,r,1ll*c);else printf("%d\n",query(l,r,c+1));}return 0;
} 

转载于:https://www.cnblogs.com/Exception2017/p/10252084.html

数列分块入门4(区间求和)相关推荐

  1. 数列分块入门2(区间小于c的个数)

    原题:http://www.caioj.cn/problem.php?id=1245 题解:我们可以分块处理.两边的块暴力,中间的块可以先预处理排序,再用lower_bound求出个数. #inclu ...

  2. LOJ——#6277. 数列分块入门 1

    ~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法--分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...

  3. 「分块」数列分块入门1 – 9

    ACM模板 放暑假了,回归!!! 自己不会写暴力,而且好久没写代码了,于是学学分块的优雅暴力~ 「分块入门-LibreOJ」 「分块」数列分块入门1 – 9 by hzwer 数列简单分块问题实际上有 ...

  4. LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)

    #6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 题目描述 给出一个长为 ...

  5. LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))...

    #6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3 题目描述 给出一 ...

  6. #6279. 数列分块入门 3(区间修改,查询权值前驱)

    #6279. 数列分块入门 3 这是使用hzwer建议的set写的分块代码,set自动排序,支持二分查找,但是常数较大,比我下面写的用vector实现的分块慢了三倍,空间大了10倍. #include ...

  7. 数列分块入门(套题)(loj6277,loj6278,loj6279,loj6280,loj6281,loj6282,loj6283,loj6284,loj6285)

    前言 zjoi考差了,码一些分块题缓解一下心情 壹 数列分块入门 1[loj6277] 题目大意:区间加,单点查 直接分块,区间加时完全覆盖的块打tag,边界块暴力重构 块大小设为n\sqrt nn​ ...

  8. 【分块入门】LOJ 数列分块入门 1 - 9 (学习更新……)

    dl题解 _「分块」数列分块入门1 – 9 by hzwer LOJ #6277. 数列分块入门 1 题意:给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 时间限制:100ms 分块 ...

  9. LOJ 数列分块入门6

    LOJ 数列分块入门6 题目: 题目 题解: 我都不懂这题为什么要用分块... ... 直接vector就好了... 但是如果有区间修改的话就不行了.所以这题是启示我们也可以动态分块.具体就是每次插入 ...

最新文章

  1. JAVA card 应用开发(二) 在项目添加APPLET
  2. tcpdf 设置pdf尺寸_AutoCAD中施工图审查PDF、DWF批量输出并自动命名
  3. 禁止java更新_禁止:禁止对'replicas','template'和'updateStrategy'以外的字段的statefulset规范进行更新...
  4. Cinder 的 I/O QoS
  5. 一次针对EduSrc的挖掘
  6. c++注释快捷键_Jupyter Notebook amp; Lab快捷键大全
  7. cwntos linux kde桌面,Centos如何安装KDE的桌面
  8. 转:设置Eclipse中的tab键为4个空格的完整方法
  9. 从事前端开发必须要了解的CSS原理
  10. js 省市下拉列表联动
  11. 随心订制linux透明防火墙
  12. 携程异步消息系统实践
  13. 2005年国内最有份量的资源下载网站一览
  14. 第80天-红蓝对抗-AWD 模式准备攻防监控批量
  15. APP登录功能的Java服务端开发
  16. MCAL知识点(六):GTM驱动配置详解
  17. CISP证书有什么用
  18. 特征锦囊:怎么找出数据集中有数据倾斜的特征?
  19. 向量叉乘求三维空间中两直线(或线段)的交点
  20. 如何一键删除计算机的更新,快速清除win7系统更新缓存文件的详细步骤

热门文章

  1. matlab 上穿,Matlab混入模式(Mixin)
  2. mysql xa 使用_MySQL如何实现 XA 规范
  3. pcb二次钻孔_作为一名合格的PCB设计工程师,了解生产制造很重要
  4. mybatis 缓存 一级缓存
  5. pytorch Tensor autograd functions
  6. redis 缓存目标
  7. python 函数特殊属性
  8. XMLHttpRequest.overrideMimeType()
  9. Spark WordCount
  10. socket通信基础