https://loj.ac/problem/6277

区间修改,单点查询。

//Stay foolish,stay hungry,stay young,stay simple
#include<iostream>
#include<cstdio>
#include<cctype>
#include<cmath>
using namespace std; const int MAXN=500005; inline int read_d(){
int ret=0,f=1;char c;
while(c=getchar(),!isdigit(c)) f=(c=='-')?-1:1;
while(isdigit(c)){
ret=ret*10+c-'0';
c=getchar();
}
return f*ret;
} int n,m; int block,num;
int a[MAXN];
int l[MAXN],r[MAXN],bl[MAXN],inc[MAXN]; 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;
} void updata(int x,int y,int w){
if(bl[x]==bl[y]){
for(int i=x;i<=y;i++) a[i]+=w;
return ;
}
for(int i=x;i<=r[bl[x]];i++)
a[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;
} inline int query(int x){
return a[x]+inc[bl[x]];
} 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++){
int x,y,z,q;
q=read_d();x=read_d();
y=read_d();z=read_d();
if(q==0) updata(x,y,z);
else printf("%d\n",query(y));
}
return 0;
}

[LOJ] 分块九题 1的更多相关文章

  1. [LOJ] 分块九题 6

    单点插入,单点查询. 优化了的链表. 链表老写错,干脆用vector,也不算慢. 注意链表退化的问题,及时(比如操作根号n次)就重新建块,实测速度可以提高一倍,这还是数据随机的情况,若涉及大量同一位置 ...

  2. [LOJ] 分块九题 4

    https://loj.ac/problem/6280 区间修改,区间求和. 本来线段树的活. //Stay foolish,stay hungry,stay young,stay simple #i ...

  3. [LOJ] 分块九题 3

    https://loj.ac/problem/6279 区间修改,区间查询前驱. TLE无数,我觉得这代码最精髓的就是block=1000. 谜一样的1000. 两个启示: 块内可以维护数据结构,比如 ...

  4. [LOJ] 分块九题 2

    https://loj.ac/problem/6278 区间修改,查询区间第k大. 块内有序(另存),块内二分. 还是用vector吧,数组拷贝排序,下标搞不来.. //Stay foolish,st ...

  5. [LOJ] 分块九题 8

    区间查询数值+整体赋值 维护tag代表整个区间被赋成了tag[i] 用pushdown操作,而不是修改了再check. 不压缩代码了,调起来心累,长点有啥不好. //Stay foolish,stay ...

  6. [LOJ] 分块九题 7

    区间加法,区间乘法,单点查询. 洛谷线段树2 屡清加法乘法的关系,定义答案为 a*mut+add 对于整块: 新的乘w,mut和add都要乘w 新的加w,add加w //Stay foolish,st ...

  7. [LOJ] 分块九题 5

    区间开平方,区间查询. lazy标记改为区间是否全是1或者0,这样的区间是没有更新价值的. //Stay foolish,stay hungry,stay young,stay simple #inc ...

  8. 数列分块总结——题目总版(hzwer分块九题及其他题目)(分块)

    闲话 莫队算法似乎还是需要一点分块思想的......于是我就先来搞分块啦! 膜拜hzwer学长神犇%%%Orz 这九道题,每一道都堪称经典,强力打Call!点这里进入 算法简述 每一次考试被炸得体无完 ...

  9. hzwer分块九题(暂时持续更新)

    hzwer分块9题 分块1:区间加法,单点查询 Code #include<bits/stdc++.h> #define in(i) (i=read()) using namespace ...

随机推荐

  1. POJ2796【单调栈】

    题意: 题意:n个数,求某段区间的最小值*该段区间所有元素之和的最大值 思路: 主要参考:http://www.cnblogs.com/ziyi–caolu/archive/2013/06/23/31 ...

  2. P5110 块速递推

    传送门 为啥我就没看出来有循环节呢-- 打表可得,这个数列是有循环节的,循环节为\(10^9+6\),然后分块预处理,即取\(k=sqrt(10^9+6)\),然后分别预处理出转移矩阵\(A\)的\( ...

  3. MapperException: 无法获取实体类xxxxx对应的表名! 三种解决方法,总有一款适合你。

    先把自动重启关一下 devtools: restart: #热部署生效 enabled: false 把devtools给删除了,说是这个jar包导致 ApplyApplication里面的@Mapp ...

  4. 【CodeForces - 546C】Soldier and Cards (vector或队列)

    Soldier and Cards 老样子,直接上国语吧  Descriptions: 两个人打牌,从自己的手牌中抽出最上面的一张比较大小,大的一方可以拿对方的手牌以及自己打掉的手牌重新作为自己的牌, ...

  5. noi,ac第五场部分题解 By cellur925

    题目质量还是不错的,只是我太菜了== 传送门 T1:序列计数(count) 题目描述 长度为n+1的序列A,其中的每个数都是不大于n的正整数,且n以内每个正整数至少出现一次. 对于每一个正整数k=1, ...

  6. UOJ #35 后缀排序 哈希做法

    题面 http://uoj.ac/problem/35 题解 后缀数组当然可以 这里用哈希做 首先排序的问题在哪里 在于比较两个后缀的复杂度是O(length)的 但是我们可以通过找LCP来优化比较 ...

  7. 总结 - 常见的JavaScript兼容性问题

    添加事件的方法 (元素, 绑定的事件类型, 事件触发的方法) addHandler: function (element, type, handler) { if (element.addEventL ...

  8. 关于list,字符串的小记录

    1.关于操作list的命令: a.append("hi") 这个可以在list的最后一项加上个这个字符串"hi",a是list的名字. del a[3] 删去l ...

  9. DNS练习之反向解析

    环境同正向解析一样. 切换到/var/named/chroot/etc目录下: 编辑named.rfc1912.zones文件,在末尾添加如下内容: [root@sishen63 etc]# vim ...

  10. PHP连接数据操作步骤

    数据库的操作步骤: 端口号:0到65535 3306:mysql数据库的默认端口号(可修改) mysql_connect(“本机地址”,“用户名”,“密码”,); new_link:如果用同样的参数第 ...