题目描述

给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,单点查值。

输入格式

第一行输入一个数字 n。

第二行输入 n 个数字,第 iii 个数字为 a​i​​,以空格隔开。

接下来输入 n 行询问,每行输入四个数字 opt、l、r、c,以空格隔开。

若 opt=0,表示将位于 [l,r] 的之间的数字都加 c。

若 opt=1,表示询问 a​r​​ 的值(ll和 c忽略)。

输出格式

对于每次询问,输出一行一个数字表示答案。

样例

样例输入

4
1 2 2 3
0 1 3 1
1 0 1 0
0 1 2 2
1 0 2 0

样例输出

2
5

题解:

分块写法

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN=50000+10; ll a[MAXN];
int block,num; //块大小 块数量
int belong[MAXN],l[MAXN],r[MAXN];//归属那一块,块左右端点
ll sum[MAXN]; // 块的信息修改
int n;
void build()
{
block=sqrt(n);
num=n/block;
if(n%block!=0) num++; // 不能被整分。
for (int i = 1; i <= num ; ++i) {
l[i]=(i-1)*block+1;r[i]=i*block;
}
r[num]=n;
for (int i = 1; i <=n ; ++i) {
belong[i]=(i-1)/block+1;
}
}
void updata(int x,int y,int c)
{
for (int i = x; i <=min(r[belong[x]],y) ; ++i) {// 注意此处取两者最小值
a[i]+=c;
}
if(belong[x]!=belong[y])
for (int i = l[belong[y]]; i <=y ; ++i) {
a[i]+=c;
}
for (int i = belong[x]+1; i <=belong[y]-1 ; ++i) {
sum[i]+=c;
} }
ll ask(int x)
{
return a[x]+sum[belong[x]];
}
int main()
{
scanf("%d",&n);
memset(sum,0, sizeof(sum));
for (int i = 1; i <=n ; ++i) {
scanf("%lld",&a[i]);
}
int op,x,y,c;
build();
for (int i = 1; i <=n ; ++i) {
scanf("%d%d%d%d",&op,&x,&y,&c);
if(op==0)
{
updata(x,y,c);
} else
{
printf("%lld\n",ask(y));
}
}
return 0;
}

  

最新文章

  1. Height Half Values
  2. 【CodeVS 1993】草地排水 isap模板题
  3. JS重点特性——闭包详解
  4. log4j的ConversionPattern参数的格式含义-转
  5. HighCharts开发说明
  6. 64位Ubuntu 13.04 安装Bochs 2.3.5
  7. Python的 is 运算符
  8. c#中用DirectShow实现媒体播放器的核心(1) DirectShow简介
  9. Html5所见即所得的几款框架
  10. jquery ui 笔记
  11. 解决ZF2_PATH environment
  12. kairosdb + cassandra Setup
  13. python-继承类执行的流程
  14. 201521123016《Java程序设计》第10周学习总结
  15. Yii2之事件
  16. [Python Study Notes] Python的安装
  17. 【Spring源码分析】非懒加载的单例Bean初始化过程(下篇)
  18. AE二次开发中几个功能速成归纳(符号设计器、创建要素、图形编辑、属性表编辑、缓冲区分析)
  19. 【转】linux防火墙配置
  20. Fiddler抓包手机代理配置

热门文章

  1. 通过bat设置系统环境变量
  2. TP5.0:跳转链接到某控制器下的某方法
  3. 【转载】#443 - An Interface Cannot Contain Fields
  4. 为什么A经理的团队总是会陷入加班与救火之中
  5. 解决svn中“工作副本已经锁定”,或者svn清理失败的解决方法
  6. BZOJ3531:[SDOI2014]旅行(树链剖分)
  7. Codeforces Round #422 (Div. 2)
  8. php new self()关键字的用法
  9. js 注册控件的onclick事件
  10. PAT (Basic Level) Practise (中文)-1040. 有几个PAT(25)