[LOJ] 分块九题 4
区间修改,区间求和。
本来线段树的活。
//Stay foolish,stay hungry,stay young,stay simple
#include<iostream>
#include<cstdio>
#include<cctype>
#include<cmath>
using namespace std;
typedef long long ll;
const int MAXN=500005;
ll sum[MAXN],r[MAXN],l[MAXN],inc[MAXN];
ll a[MAXN],bl[MAXN],block;
ll n,m,num;
inline ll read_d(){
ll ret=0,f=1;char c;
while(c=getchar(),!isdigit(c)) f=c=='-'?-1:1;
while(isdigit(c)){
ret*=10;ret+=c-'0';c=getchar();
}
return ret*f;
}
inline void write(ll x)
{
if(x<0) x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
inline void build(){
block=sqrt(n);
num=n/block;
if(n%block) num++;
for(int i=1;i<=num;i++){
l[i]=(i-1)*block+1;
r[i]=i*block;
}
for(int i=1;i<=n;i++)
bl[i]=(i-1)/block+1;
r[num]=n;
for(int i=1;i<=num;i++)
for(int j=l[i];j<=r[i];j++)
sum[i]+=a[j];
}
inline void updata(ll x,ll y,ll w){
if(bl[x]==bl[y]){
for(int i=x;i<=y;i++) a[i]+=w;
sum[bl[x]]+=w*(y-x+1);
return ;
}
for(int i=x;i<=r[bl[x]];i++)
a[i]+=w,sum[bl[i]]+=w;
for(int i=bl[x]+1;i<=bl[y]-1;i++)
inc[i]+=w;
for(int i=l[bl[y]];i<=y;i++)
a[i]+=w,sum[bl[i]]+=w;
}
inline ll query(int x,int y){
ll ret=0;
if(bl[x]==bl[y]){
for(int i=x;i<=y;i++) ret+=a[i]+inc[bl[i]];
return ret;
}
for(int i=x;i<=r[bl[x]];i++) ret+=a[i]+inc[bl[i]];
for(int i=bl[x]+1;i<=bl[y]-1;i++)
ret+=sum[i]+inc[i]*(r[i]-l[i]+1);
for(int i=l[bl[y]];i<=y;i++) ret+=a[i]+inc[bl[i]];
return ret;
}
int main(){
n=read_d();
m=n;
for(int i=1;i<=n;i++)
a[i]=read_d();
build();
for(int i=1;i<=m;i++){
ll q,x,y,z;
q=read_d();
x=read_d();
y=read_d();
z=read_d();
if(q==0) updata(x,y,z);
else write(query(x,y)%(z+1)),putchar('\n');//讲道理是得query里每步模的
}
return 0;
}
[LOJ] 分块九题 4的更多相关文章
- [LOJ] 分块九题 6
单点插入,单点查询. 优化了的链表. 链表老写错,干脆用vector,也不算慢. 注意链表退化的问题,及时(比如操作根号n次)就重新建块,实测速度可以提高一倍,这还是数据随机的情况,若涉及大量同一位置 ...
- [LOJ] 分块九题 3
https://loj.ac/problem/6279 区间修改,区间查询前驱. TLE无数,我觉得这代码最精髓的就是block=1000. 谜一样的1000. 两个启示: 块内可以维护数据结构,比如 ...
- [LOJ] 分块九题 2
https://loj.ac/problem/6278 区间修改,查询区间第k大. 块内有序(另存),块内二分. 还是用vector吧,数组拷贝排序,下标搞不来.. //Stay foolish,st ...
- [LOJ] 分块九题 1
https://loj.ac/problem/6277 区间修改,单点查询. //Stay foolish,stay hungry,stay young,stay simple #include< ...
- [LOJ] 分块九题 8
区间查询数值+整体赋值 维护tag代表整个区间被赋成了tag[i] 用pushdown操作,而不是修改了再check. 不压缩代码了,调起来心累,长点有啥不好. //Stay foolish,stay ...
- [LOJ] 分块九题 7
区间加法,区间乘法,单点查询. 洛谷线段树2 屡清加法乘法的关系,定义答案为 a*mut+add 对于整块: 新的乘w,mut和add都要乘w 新的加w,add加w //Stay foolish,st ...
- [LOJ] 分块九题 5
区间开平方,区间查询. lazy标记改为区间是否全是1或者0,这样的区间是没有更新价值的. //Stay foolish,stay hungry,stay young,stay simple #inc ...
- 数列分块总结——题目总版(hzwer分块九题及其他题目)(分块)
闲话 莫队算法似乎还是需要一点分块思想的......于是我就先来搞分块啦! 膜拜hzwer学长神犇%%%Orz 这九道题,每一道都堪称经典,强力打Call!点这里进入 算法简述 每一次考试被炸得体无完 ...
- hzwer分块九题(暂时持续更新)
hzwer分块9题 分块1:区间加法,单点查询 Code #include<bits/stdc++.h> #define in(i) (i=read()) using namespace ...
随机推荐
- Vue-CLI3详解
vue-cli3快速开始 node 安装,略. webpack 安装webpack npm install webpack webpack-cli -g 查看版本 webpack -v vue-cli ...
- Qt 2D绘图之一:基本图形绘制和渐变填充
Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类.它们三者的关系如下图所示: QP ...
- 关于能ping通服务器但ssh登陆不上的问题
一般来说能ping通服务器说明网没问题 这是可以查看一下防火墙的设置和ip的屏蔽设置 /etc/init.d/iptables status 查看防火墙状态 vim /etc/hosts.allow ...
- 面试王牌 JAVA并发
Java 并发 JavathreadSocketC#C++ 并发 Table of Contents 1 什么是并发问题. 2多线程死锁问题 2 java中synchronized的用法 3 Java ...
- josephus 问题的算法(转载)
Josephus 问题: 一群小孩围成一个圈,任意假定一个数 m,从第一个小孩起,顺时针方向数,每数到第 m 个小孩时,该小孩便离开.小孩不断离开,圈子不断缩小,最后剩下的一个小孩便是胜利者.究竟胜利 ...
- 130 Surrounded Regions 被围绕的区域
给定一个二维的矩阵,包含 'X' 和 'O'(字母 O), 找到所有被 'X' 围绕的区域.并将区域里所有 'O'用 'X' 填充.例如,X X X XX O O XX X O XX O X X运行你 ...
- 168 Excel Sheet Column Title Excel表列名称
给定一个正整数,返回它在Excel表中相对应的列名称.示例: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -&g ...
- qconshanghai2016
http://2016.qconshanghai.com/schedule 大会日程 2016年10月20日 星期四 07:45 开始签到 09:00 开场致辞 专题 前端技术实践 主题演讲 业务上云 ...
- WebForm中 页面传参的总结
页面与后台的数据传递是实现动态页面的前提---数据交互.无论是MVC还是WebFrom 都需要详细了解各种前后台的数据传输方式,熟悉每种方式的优缺点,这样才能提高网站的性能,技术上得到锻炼. 1.Fo ...
- spring mvc URL忽略大小写
@Configuration public class SpringWebConfig extends WebMvcConfigurationSupport { @Override public vo ...