codevs——1081 线段树练习 2
给你N个数,有两种操作
1:给区间[a,b]的所有数都增加X
2:询问第i个数是什么?
第一行一个正整数n,接下来n行n个整数,再接下来一个正整数Q,表示操作的个数. 接下来Q行每行若干个整数。如果第一个数是1,后接3个正整数a,b,X,表示在区间[a,b]内每个数增加X,如果是2,后面跟1个整数i, 表示询问第i个位置的数是多少。
对于每个询问输出一行一个答案
3
1
2
3
2
1 2 3 2
2 3
5
数据范围
1<=n<=100000
1<=q<=100000
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 400010
using namespace std;
int x,y,z,p,n,m,ans;
int read()
{
,f=; char ch=getchar();
; ch=getchar();}
+ch-'; ch=getchar();}
return x*f;
}
struct noid
{
int l,r,w,f;
}tree[N];
void build(int l,int r,int k)
{
tree[k].l=l,tree[k].r=r;
if(l==r)
{
x=read(),tree[k].w=x;
return ;
}
;
build(l,m,k<<),build(m+,r,(k<<)+);
tree[k].w].w+tree[(k<<)+].w;
}
void down(int k)
{
tree[k<<].f+=tree[k].f;
tree[(k<<)+].f+=tree[k].f;
tree[k<<].w+=(tree[k<<].r-tree[k<<].l+)*tree[k].f;
tree[(k<<)+].w)+].r-tree[(k<<)+].l+)*tree[k].f;
tree[k].f=;
}
void add(int k)
{
if(tree[k].l>=x&&tree[k].r<=y)
{
tree[k].w+=(tree[k].r-tree[k].l+)*z;
tree[k].f+=z;
return ;
}
if(tree[k].f) down(k);
;
);
)+);
tree[k].w=tree[k<<].w+tree[(k<<)+].w;
}
void ask(int k)
{
if(tree[k].l==tree[k].r)
{
ans=tree[k].w;
return ;
}
if(tree[k].f) down(k);
;
);
)+);
}
int main()
{
n=read();build(,n,);
m=read();
while(m--)
{
p=read();
){x=read(),y=read(),z=read(),add();}
),printf("%d\n",ans);}
}
;
}
codevs——1081 线段树练习 2的更多相关文章
- Codevs 1081 线段树练习 2
1081 线段树练习 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 传送门 题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的 ...
- codevs 1081 线段树练习2 (线段树)
题目: 题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所有数都增加X 2:询问第i个数是什么? 输入描述 Input Description 第一行一个正整数n,接下 ...
- codevs 1081 线段树练习 2 线段树
题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所有数都增加X 2:询问第i个数是什么? 输入描述 Input Description 第一行一个正整数n,接下来n行n ...
- Codevs 1081 线段树练习2
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所有数都增加X 2:询问第 ...
- codevs 1081 线段树练习 2 区间更新 单点查询 无lazy
题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所有数都增加X 2:询问第i个数是什么? 输入描述 Input Description 第一行一个正整数n,接下来n行n ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- codevs 1080 线段树练习 CDQ分治
codevs 1080 线段树练习 http://codevs.cn/problem/1080/ 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 一行N个 ...
随机推荐
- 【原】无脑操作:Eclipse + Maven + jFinal + MariaDB 环境搭建
一.开发环境 1.windows 7 企业版 2.Eclipse IDE for Enterprise Java Developers Version: 2019-03 (4.11.0) 3.JDK ...
- SpringBoot 2.x (4):配置文件与单元测试
SpringBoot的配置文件有默认的application.properties 还可以使用YAML 区别: application.properties示例: server.port=8090 s ...
- webpack 报错:Module build failed: Unknown word (1:1)
解决方法:一是确保css配置里的"style-loader"必须在"css-loader"之前,二是将整个css配置注释掉,如下图:
- GridView 中绑定DropDownList ,下拉框默认选中Label的值
在GridView中,我们 有时候要绑定值. 前台绑定的代码可以这样 <asp:TemplateField HeaderText="当前状态" ItemStyle-Horiz ...
- Java对Redis基本使用
1 引入jar包 java是通过Jedis对redis进行操作的,首先引入jedis.jar <dependency> <groupId>redis.clients</g ...
- SQL 索引自动维护计划脚本
脚本功能: 1,查询数据库中,碎片率在5%以上(官方推荐),有一定数据里的表的索引. 2.如果碎片率在5%<碎片率<=30% 执行重新组织索引.如果在30%以上,执行重建索引 建议在执行 ...
- (转载)Sql注入的分类:数字型+字符型
Sql注入: 就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.通过构造恶意的输入,使数据库执行恶意命令,造成数据泄露或者修改内容等,以 ...
- Winform之GDI绘制验证码
主要功能:点击验证码可更换,输入验证码进行登陆 需要导入命名空间System.Drawing; 产生五位的随机字符串: 1 Random random = new Random(); //产生5个随机 ...
- 04XML CSS
XML CSS 1. XML CSS <?xml-stylesheet href ="样式表的URI" type= "text/css" ?> ...
- 面试之JVM
目录 Java虚拟机 类的加载方式 Java内存模型 程序计数器(PC) Java虚拟机栈(Stack) 本地方法栈 元空间(MetaSpace) Java堆(Heap) 内存分配策略 垃圾回收(GC ...