线段树维护

#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相关推荐

  1. UOJ #164 [清华集训2015]V (线段树)

    题目链接 http://uoj.ac/problem/164 题解 神仙线段树题. 首先赋值操作可以等价于减掉正无穷再加上\(x\). 假设某个位置从前到后的操作序列是: \(x_1,x_2,..., ...

  2. 【uoj#164】[清华集训2015]V 线段树维护历史最值

    题目描述 给你一个长度为 $n$ 的序列,支持五种操作: $1\ l\ r\ x$ :将 $[l,r]$ 内的数加上 $x$ : $2\ l\ r\ x$ :将 $[l,r]$ 内的数减去 $x$ , ...

  3. 【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)

    文章目录 Gorgeous Sequence Tyvj 1518 CPU监控 [清华集训2015]V Naive Operations Picture Walking Race Gorgeous Se ...

  4. UOJ #164 【清华集训2015】V (线段树)

    题目链接 http://uoj.ac/problem/164 题解 神仙线段树题. 首先赋值操作可以等价于减掉正无穷再加上\(x\). 假设某个位置从前到后的操作序列是: \(x_1,x_2,..., ...

  5. [清华集训2015 Day1]玛里苟斯-[线性基]

    Description Solution 考虑k=1的情况.假设所有数中,第i位为1的数的个数为x,则最后所有的子集异或结果中,第i位为1的个数为$(C_{k}^{1}+C_{k}^{3}+...)$ ...

  6. 【BZOJ3811】【清华集训2015】玛里苟斯(线性基)

    传送门 解析: 还是挺好想的,首先对于k=1的情况,如果某一个数在这一位上有1,那么最终结果中这一位为1的概率就是0.5. 有一个很显然的性质,所有异或结果出现概率(或者说方案数)相同. 其次,对于k ...

  7. UOJ #274. 【清华集训2016】温暖会指引我们前行 [lct]

    #274. [清华集训2016]温暖会指引我们前行 题意比较巧妙 裸lct维护最大生成树 #include <iostream> #include <cstdio> #incl ...

  8. [清华集训2016]石家庄的工人阶级队伍比较坚强——三进制FWT

    题目链接: [清华集训2016]石家庄的工人阶级队伍比较坚强 题目大意:有$n=3^m$个人玩石头剪刀布,共$t$轮游戏,每轮每个人要和包括自己的所有人各进行$m$次石头剪刀布.每个人在$m$轮中的决 ...

  9. 【清华集训2016】数据交互

    [清华集训2016]数据交互 比较神的\(DDP\). 首先对于给出的一条链我们分两部分统计:\(lca\)以及其他部分. 我们设两个变量\(w_i,g_i\).一条路径的权值就是路径上所有点的\(w ...

  10. Loj #2324. 「清华集训 2017」小 Y 和二叉树

    Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...

最新文章

  1. 深入浅出 MyBatis 的一级、二级缓存机制
  2. php 实现查询百度排名,PHP实现获取百度top50的搜索排行关键字
  3. java中的默认排序规则,C#中列表,集合排序Sort,OrderBy与Java排序规则默认不一致...
  4. Acrobat XI安装教程
  5. pip3 便捷安装包
  6. vue-router 路由跳转
  7. Vue 3 正式发布
  8. 4、Cocos2dx 3.0游戏开发找小三之Hello World 分析
  9. python day33
  10. TextView 倾斜属性
  11. 计算机专业html5的毕业论文范文,5000字计算机专业大专毕业论文参考范文
  12. 2020年8月4日王者服务器维修,2020年8月4日小鸡正确的答案
  13. 树莓派学习记录1-树莓派系统烧录与无屏幕网线连接开机
  14. 递归与非递归实现走迷宫算法
  15. GPU渲染管线之旅|04 纹理和采样
  16. android中的各种缓存目录
  17. MP3随身听固件升级详细教程
  18. JAVA开发(分布式SpringCloud全家桶一些组件读法)
  19. 苏州C/C++方向的公司汇总
  20. 一道有趣的微软笔试题

热门文章

  1. 第17期基于SSM爱家房屋租赁管理系统
  2. TypeError: Cannot set property ‘styles‘ of undefined
  3. 吉投资管系统搭建仅用于盘手培训
  4. 图像处理(一)bicubic解释推导
  5. [Google] 再见 SharedPreferences 拥抱 Jetpack DataStore
  6. 【果壳笔记】生物信息学——陈小伟老师部分
  7. 百度网盘视频加速代码
  8. Python学习笔记-数据类型(元组 tuple)
  9. 2020家用千兆路由器哪款好_企业级千兆路由器哪个牌子好?2020排名
  10. 微信小程序 ES6语法