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;
}

最新文章

  1. ASP.NET MVC 表单submit()
  2. Sum All Primes
  3. 安卓--shape简单使用
  4. C++ 添加库
  5. WeakReference(弱引用)
  6. Python学习笔记-Day3-python函数
  7. having count(*) &gt; 1
  8. Android导入Cocos2D的Sample项目
  9. UVA 705 Slash Maze
  10. 静态代理VS动态代理
  11. pathload --有效的网络带宽估计方法
  12. [0] TFS 分支/标签
  13. Ext.grid.EditorGridPanel点击单元格添加菜单栏
  14. Linux入门篇(二)——文件
  15. java程序中执行HiveQL
  16. asp.net webapi 获取报文体的问题
  17. JavaScript——变量
  18. Emacs org-mode导出html出错
  19. Android7.0新特性,及Android N适配
  20. zz 牛人啊

热门文章

  1. hdu 3038 How Many Answers Are Wrong【带权并查集】
  2. 【Tip】JavaScript
  3. Java | 基础归纳 | Gson &amp;&amp; Json
  4. 连接php/mysql
  5. 洛谷1736(二维dp+预处理)
  6. PWA之push服务
  7. JDBC全部分析
  8. 通过表单展示不一样的页面(input对象)
  9. python_函数嵌套(4)
  10. [转]如何使用MFC和类型库创建自动化项目