codevs 1082 线段树练习3 模板题
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- long long a[],sum[],add[],n;
- void pushup(long long rt){sum[rt]=sum[rt<<]+sum[rt<<|];}
- void build(long long l,long long r,long long rt)
- {
- if (l==r){sum[rt]=a[l];return;}
- long long mid=(l+r)>>;
- build(l,mid,rt<<);
- build(mid+,r,rt<<|);
- pushup(rt);
- }
- void pushdown(long long rt,long long ln,long long rn)
- {
- if (add[rt])
- {
- add[rt<<]+=add[rt];
- add[rt<<|]+=add[rt];
- sum[rt<<]+=add[rt]*ln;
- sum[rt<<|]+=add[rt]*rn;
- add[rt]=;
- }
- }
- void updata(long long L,long long R,long long C,long long l,long long r,long long rt)
- {
- if ((L<=l)&&(r<=R))
- {
- sum[rt]+=C*(r-l+);
- add[rt]+=C; return;
- }
- long long mid=(l+r)>>;
- pushdown(rt,mid-l+,r-mid);
- if (L<=mid) updata(L,R,C,l,mid,rt<<);
- if (R>mid) updata(L,R,C,mid+,r,rt<<|);
- pushup(rt);
- }
- long long query(long long L,long long R,long long l,long long r,long long rt)
- {
- if ((L<=l)&&(r<=R)) return sum[rt];
- long long mid=(l+r)>>;
- pushdown(rt,mid-l+,r-mid);
- long long ans=;
- if (L<=mid) ans+=query(L,R,l,mid,rt<<);
- if (R>mid) ans+=query(L,R,mid+,r,rt<<|);
- return ans;
- }
- int main()
- {
- scanf("%lld",&n);
- long long i,j,q,t,l,r,x;
- for (i=;i<=n;++i) scanf("%lld",&a[i]);
- build(,n,);
- scanf("%lld",&q);
- for (i=;i<=q;++i)
- {
- scanf("%lld",&t);
- if (t==)
- {
- scanf("%lld%lld%lld",&l,&r,&x);
- updata(l,r,x,,n,);
- }
- else
- {
- scanf("%lld%lld",&l,&r);
- printf("%lld\n",query(l,r,,n,));
- }
- }
- return ;
- }
codevs 1082 线段树练习3 模板题的更多相关文章
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- codevs 1082 线段树练习3
1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Description 给你N个数,有两种操作: 1: ...
- Codevs 1082 线段树练习 3
1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Maste 传送门 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的 ...
- 【BZOJ 3196】二逼平衡树 线段树套splay 模板题
我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排 ...
- codevs 1082 线段树练习3 (线段树)
题目: 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数 ...
- 【树状数组区间修改区间求和】codevs 1082 线段树练习 3
http://codevs.cn/problem/1082/ [AC] #include<bits/stdc++.h> using namespace std; typedef long ...
- codevs 1082 线段树练习 3 --分块练习
时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[ ...
- codevs 1082 线段树练习 3 区间更新+延迟标记
题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数n,接下 ...
随机推荐
- Office文件上传自动生成缩略图
来源:微信公众号CodeL 前不久产品经理提出一个X的需求,说上传office文件的时候需要将首页自动截图,用于显示文件列表的时候将文件第一页缩略图展示给用户.实现的方式有多种,这里给大家介绍一个简单 ...
- 有限状态机HDL模板
逻辑设计, 顾名思义, 只要理清了逻辑和时序, 剩下的设计只是做填空题而已. 下面给出了有限状态机的标准设计,分别为 VHDL 和 Verilog 代码 1 有限状态机 2 VHDL模板之一 li ...
- Rem实现自适应初体验
第一次做移动端的页面,遇到的第一个问题就是移动端的轮播图.其实轮播图的插件有很多,但是完全满足需求的并不容易找. 需求: 1.实现基本的触屏轮播图效果 2.传入非标准比例的图片,可以自动平铺(有时候图 ...
- poj1459 Power Network (多源多汇最大流)
Description A power network consists of nodes (power stations, consumers and dispatchers) connected ...
- android studio没有org.apache.http.client.HttpClient;等包问题 解决方案
以前用Eclipse做Android开发工具一直使用apache的http做网络请求,最近换用了Android studio发现没有办法引用apache的包,下面是我引用的步骤
- Windows远程桌面连接Ubuntu 14.04
由于xrdp.gnome和unity之间的兼容性问题,在Ubuntu 14.04版本中仍然无法使用xrdp登陆gnome或unity的远程桌面,现象是登录后只有黑白点为背景,无图标也无法操作.与13. ...
- 继承进一步使用,以及super关键字
目标: 1)掌握子类对象实例化过程 2)掌握方法覆盖概念和实现. 3)掌握super关键字的作用. 一,子类对象实例化过程 子类对象在实例化之前,必须先调用父类中的构造方法,再调用子类中的构造方法. ...
- tp2.2.2新特点
1.不需要在配置文件中配置URL_MODEL变量就可以用普通模式和路径模式及兼容模式访问URL,但重写模式不可以. 2.当访问的URL地址没有指明具体动作(控制器里的方法)的时候,如果该控制器对应的视 ...
- win7系统电脑连接小米蓝牙音箱
一.买好蓝牙适配器,插到电脑上. 二.右下角工具栏找到蓝牙图标 三.右键这个图标,选择'显示Bluetooth设备' 四.找到小米蓝牙音箱 'NDZ-030-AA' 五.双击打开它,然后选择'服务'选 ...
- 2703 奶牛代理商 XII
2703 奶牛代理商 XII 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 小徐从美国回来后,成为了USAC ...