#164. 【清华集训2015】V
线段树维护
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define MAXN 500010
#define LL long long
LL num[MAXN];struct H
{LL x,y;
}mark[MAXN*4],mmax[MAXN*4];H Up(H a,H b)
{H tmp;if(a.y>b.y) swap(a,b);if(a.x-a.y>b.x-b.y) return b;tmp.y=b.y;tmp.x=a.x+b.y-a.y;return tmp;
}void Do(H &a,LL x)
{a.y+=x;if(a.y<0) a.x-=a.y,a.y=0;//,cout<<a.x<<endl;;if(a.x>1000000000000000ll) a.x=1000000000000000ll;
}void Pushdown(int now,int l,int r)
{if(l==r) return ;int L=now*2;{ H tmp=mark[L];Do(tmp,-mmax[now].x);Do(tmp,mmax[now].y);Do(mark[L],-mark[now].x);Do(mark[L],mark[now].y);mmax[L]=Up(mmax[L],mark[L]);mmax[L]=Up(mmax[L],tmp); }int R=now*2+1;{H tmp=mark[R];Do(tmp,-mmax[now].x);Do(tmp,mmax[now].y);Do(mark[R],-mark[now].x);Do(mark[R],mark[now].y);mmax[R]=Up(mmax[R],mark[R]);mmax[R]=Up(mmax[R],tmp);}mark[now].x=0;mark[now].y=0;mmax[now].x=0;mmax[now].y=0;
}void Change(int now,int l,int r,int s,int t,LL x)
{
// cout<<"***"<<x<<endl;if(s<=l&&r<=t){Do(mark[now],x);mmax[now]=Up(mmax[now],mark[now]);return ;} Pushdown(now,l,r);int mid=(l+r)/2;if(s<=mid) Change(now*2,l,mid,s,t,x);if(mid+1<=t) Change(now*2+1,mid+1,r,s,t,x);
}int Q(int now,int l,int r,int loc)
{
//cout<<now<<' '<<l<<' '<<r<<' '<<mark[now].x<<' '<<mark[now].y<<endl;if(l==r) return now; Pushdown(now,l,r);int mid=(l+r)/2;if(loc<=mid) return Q(now*2,l,mid,loc);else return Q(now*2+1,mid+1,r,loc);
}int main()
{
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);int n,m;cin >>n >>m;for(int i=1;i<=n;i++) scanf("%lld",&num[i]);int opt,l,r,x;int tmp;LL ans;while(m--){scanf("%d",&opt);
// cout<<'*'<<m<<endl;switch(opt){case 1: scanf("%d %d %d",&l,&r,&x);Change(1,1,n,l,r,x);break;case 2: scanf("%d %d %d",&l,&r,&x);Change(1,1,n,l,r,-x);break;case 3: scanf("%d %d %d",&l,&r,&x);Change(1,1,n,l,r,(LL)-1000000000000000ll);Change(1,1,n,l,r,x);break;case 4: scanf("%d",&x);tmp=Q(1,1,n,x);ans=0;if(num[x]<=mark[tmp].x) ans=mark[tmp].y;else ans=mark[tmp].y+num[x]-mark[tmp].x;// if(ans==0) cout<<mark[tmp].y<<endl;// cout<<tmp<<endl;// cout<<num[x]<<' '<<mark[tmp].x<<' '<<mark[tmp].y<<endl; printf("%lld\n",ans);break;case 5: scanf("%d",&x);tmp=Q(1,1,n,x);//cout<<num[x]<<' '<<mmax[tmp].x<<' '<<mmax[tmp].y<<endl; ans=0;if(num[x]<=mmax[tmp].x) ans=mmax[tmp].y;else ans=mmax[tmp].y+num[x]-mmax[tmp].x;printf("%lld\n",ans);break;}}return 0;
}
#164. 【清华集训2015】V相关推荐
- UOJ #164 [清华集训2015]V (线段树)
题目链接 http://uoj.ac/problem/164 题解 神仙线段树题. 首先赋值操作可以等价于减掉正无穷再加上\(x\). 假设某个位置从前到后的操作序列是: \(x_1,x_2,..., ...
- 【uoj#164】[清华集训2015]V 线段树维护历史最值
题目描述 给你一个长度为 $n$ 的序列,支持五种操作: $1\ l\ r\ x$ :将 $[l,r]$ 内的数加上 $x$ : $2\ l\ r\ x$ :将 $[l,r]$ 内的数减去 $x$ , ...
- 【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)
文章目录 Gorgeous Sequence Tyvj 1518 CPU监控 [清华集训2015]V Naive Operations Picture Walking Race Gorgeous Se ...
- UOJ #164 【清华集训2015】V (线段树)
题目链接 http://uoj.ac/problem/164 题解 神仙线段树题. 首先赋值操作可以等价于减掉正无穷再加上\(x\). 假设某个位置从前到后的操作序列是: \(x_1,x_2,..., ...
- [清华集训2015 Day1]玛里苟斯-[线性基]
Description Solution 考虑k=1的情况.假设所有数中,第i位为1的数的个数为x,则最后所有的子集异或结果中,第i位为1的个数为$(C_{k}^{1}+C_{k}^{3}+...)$ ...
- 【BZOJ3811】【清华集训2015】玛里苟斯(线性基)
传送门 解析: 还是挺好想的,首先对于k=1的情况,如果某一个数在这一位上有1,那么最终结果中这一位为1的概率就是0.5. 有一个很显然的性质,所有异或结果出现概率(或者说方案数)相同. 其次,对于k ...
- UOJ #274. 【清华集训2016】温暖会指引我们前行 [lct]
#274. [清华集训2016]温暖会指引我们前行 题意比较巧妙 裸lct维护最大生成树 #include <iostream> #include <cstdio> #incl ...
- [清华集训2016]石家庄的工人阶级队伍比较坚强——三进制FWT
题目链接: [清华集训2016]石家庄的工人阶级队伍比较坚强 题目大意:有$n=3^m$个人玩石头剪刀布,共$t$轮游戏,每轮每个人要和包括自己的所有人各进行$m$次石头剪刀布.每个人在$m$轮中的决 ...
- 【清华集训2016】数据交互
[清华集训2016]数据交互 比较神的\(DDP\). 首先对于给出的一条链我们分两部分统计:\(lca\)以及其他部分. 我们设两个变量\(w_i,g_i\).一条路径的权值就是路径上所有点的\(w ...
- Loj #2324. 「清华集训 2017」小 Y 和二叉树
Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...
最新文章
- 深入浅出 MyBatis 的一级、二级缓存机制
- php 实现查询百度排名,PHP实现获取百度top50的搜索排行关键字
- java中的默认排序规则,C#中列表,集合排序Sort,OrderBy与Java排序规则默认不一致...
- Acrobat XI安装教程
- pip3 便捷安装包
- vue-router 路由跳转
- Vue 3 正式发布
- 4、Cocos2dx 3.0游戏开发找小三之Hello World 分析
- python day33
- TextView 倾斜属性
- 计算机专业html5的毕业论文范文,5000字计算机专业大专毕业论文参考范文
- 2020年8月4日王者服务器维修,2020年8月4日小鸡正确的答案
- 树莓派学习记录1-树莓派系统烧录与无屏幕网线连接开机
- 递归与非递归实现走迷宫算法
- GPU渲染管线之旅|04 纹理和采样
- android中的各种缓存目录
- MP3随身听固件升级详细教程
- JAVA开发(分布式SpringCloud全家桶一些组件读法)
- 苏州C/C++方向的公司汇总
- 一道有趣的微软笔试题
热门文章
- 第17期基于SSM爱家房屋租赁管理系统
- TypeError: Cannot set property ‘styles‘ of undefined
- 吉投资管系统搭建仅用于盘手培训
- 图像处理(一)bicubic解释推导
- [Google] 再见 SharedPreferences 拥抱 Jetpack DataStore
- 【果壳笔记】生物信息学——陈小伟老师部分
- 百度网盘视频加速代码
- Python学习笔记-数据类型(元组 tuple)
- 2020家用千兆路由器哪款好_企业级千兆路由器哪个牌子好?2020排名
- 微信小程序 ES6语法