http://codevs.cn/problem/1081/

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 大师 Master
题目描述 Description

给你N个数,有两种操作

1:给区间[a,b]的所有数都增加X

2:询问第i个数是什么?

输入描述 Input Description

第一行一个正整数n,接下来n行n个整数,再接下来一个正整数Q,表示操作的个数. 接下来Q行每行若干个整数。如果第一个数是1,后接3个正整数a,b,X,表示在区间[a,b]内每个数增加X,如果是2,后面跟1个整数i, 表示询问第i个位置的数是多少。

输出描述 Output Description

对于每个询问输出一行一个答案

样例输入 Sample Input

3

1

2

3

2

1 2 3 2

2 3

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

数据范围

1<=n<=100000

1<=q<=100000

分类标签 Tags 点此展开

 
 
 #include <iostream>
#define maxn 100005 using namespace std; int n,m,x,a,b,X;
struct node
{
int now,dis,l,r,mid,flag;
}tree[maxn*]; void tree_up(int now)
{
tree[now].dis=tree[now*].dis+tree[now*+].dis;
return ;
} void tree_build(int now,int l,int r)
{
tree[now].l=l,tree[now].r=r;
if(tree[now].l==tree[now].r)
{
cin>>tree[now].dis;
return ;
}
tree[now].mid=(tree[now].l+tree[now].r)/;
tree_build(now*,l,tree[now].mid);
tree_build(now*+,tree[now].mid+,r);
tree_up(now);
} void tree_down(int now)
{
tree[now*].flag+=tree[now].flag;
tree[now*].dis+=tree[now].flag*(tree[now*].r-tree[now*].l+);
tree[now*+].flag+=tree[now].flag;
tree[now*+].dis+=tree[now].flag*(tree[now*+].r-tree[now*+].l+);
tree[now].flag=; return ;
} void tree_change(int now,int l,int r,int x)
{
if(tree[now].l==l&&tree[now].r==r)
{
tree[now].dis+=x*(r-l+);
tree[now].flag+=x;
return ;
}
if(tree[now].flag) tree_down(now);
if(tree[now].mid>=r) tree_change(now*,l,r,x);
else if(tree[now].mid<l) tree_change(now*+,l,r,x);
else
{
tree_change(now*,l,tree[now].mid,x);
tree_change(now*+,tree[now].mid+,r,x);
}
tree_up(now);
} int tree_query(int now,int to)
{
if(tree[now].l==tree[now].r) return tree[now].dis;
if(tree[now].flag) tree_down(now);
if(tree[now].mid>=to) return tree_query(now*,to);
else if(tree[now].mid<to) return tree_query(now*+,to);
} int main()
{
cin>>n;
tree_build(,,n);
cin>>m;
while(m--)
{
cin>>x;
if(x==)
{
cin>>a>>b>>X;
tree_change(,a,b,X);
}
else
{
cin>>X;
cout<<tree_query(,X)<<endl;
}
}
return ;
}

区间改变 单点查询

最新文章

  1. Vitrualbox虚拟机网络设置
  2. MyBatis 配置文件头部换行异常
  3. linux git 推送空文件夹
  4. c#网络编程
  5. ubuntu16.4下用jexus部署asp.net core rtm
  6. 怎么控制表单placeholder属性的样式兼容各大浏览器?
  7. 转: HTML的电子邮件链接标签mailto用法详解
  8. C#中的Collection 2
  9. angularJS $resource与后台restapi的对应关系
  10. mysql中的load命令使用方法
  11. 2016031401 - ubuntu显示桌面快捷键
  12. WPF DataGrid_SelectChanged获取单元内容
  13. hadoop编程小技巧(7)---自己定义输出文件格式以及输出到不同文件夹
  14. JQuery的插件式开发
  15. 登录测试用例sql语句注入
  16. java 读取本地文件并转换为byte数组
  17. Express全系列教程之(九):将session上传至mysql数据库
  18. MySQL报错解决方案:2013-Lost connection
  19. java框架之Spring(3)-JDBC模板使用&amp;事务管理
  20. [LeetCode&amp;Python] Problem 202. Happy Number

热门文章

  1. C语言小项目-火车票订票系统
  2. [ZJOI2005]沼泽鳄鱼
  3. [ZJOI2006]GameZ游戏排名系统
  4. 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement
  5. Linux环境下修改MySQL数据库对表名大小写不敏感
  6. C++ const学习
  7. python--12、pymysql模块
  8. jquery滚轮事件
  9. PHP常见问题总结
  10. 简单工厂模式&amp;工厂方法模式&amp;抽象工厂模式的区别