传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=4355

吉司机线段树(去年又在现场系列)
某Q:线段树带来的沉重打击

写得巨挫,下次肯定会去换个姿势的QwQ

#include<stdio.h>
#include<algorithm>
#define inf 233333333333333333LL
#define lim 1
#define Lson t[k].lson
#define Rson t[k].rson
#define N 300005typedef long long ll;
using namespace std;inline void read(int &x)
{x=0;int f=1;char ch=getchar();for (;ch<'0' || '9'<ch;ch=getchar()) if (ch=='-') f=-1;for (;'0'<=ch && ch<='9';ch=getchar()) x=x*10+ch-'0';x*=f;
}struct tree
{int lson,rson,tot,cc;ll tagm,fi,se,taga;
}t[N<<1];int tot,n,L,R,X,a[N],m,Root,type,Ans;inline void ms(const int &k,const int &l,const int &r);inline void push(const int &k,const int &l,const int &r)
{t[Lson].cc=t[Rson].cc=t[k].cc;t[k]=(tree){t[k].lson,t[k].rson,r-l+1,-1,-inf,t[k].cc,23333333333333333LL,0};
}void maintain(const int &k,const int &l,const int &r)
{if (l==r) {if (t[k].cc!=-1) t[k].fi=t[k].cc;else t[k].fi=max(t[k].taga+t[k].fi,(ll)t[k].tagm);t[k].taga=0;t[k].tagm=-inf;t[k].cc=-1;return;}int mid=(l+r)>>1;if (t[k].taga || -lim<t[k].tagm || t[k].cc!=-1){if (t[k].cc!=-1){push(k,l,r);return;}t[k].fi+=t[k].taga;t[k].se+=t[k].taga;if (t[Lson].cc!=-1) push(Lson,l,mid);if (t[Rson].cc!=-1) push(Rson,mid+1,r);t[Lson].tagm+=t[k].taga;t[Rson].tagm+=t[k].taga;t[Lson].taga+=t[k].taga;t[Rson].taga+=t[k].taga;t[k].taga=0;if (t[k].tagm<=t[k].fi) t[k].tagm=-inf;if (t[k].fi<t[k].tagm && t[k].tagm<t[k].se){t[k].fi=t[k].tagm;t[Lson].tagm=max(t[Lson].tagm,t[k].tagm);t[Rson].tagm=max(t[Rson].tagm,t[k].tagm);}if (t[k].se<=t[k].tagm){t[Lson].tagm=max(t[Lson].tagm,t[k].tagm);t[Rson].tagm=max(t[Rson].tagm,t[k].tagm);maintain(Lson,l,mid);maintain(Rson,mid+1,r);ms(k,l,r);}t[k].tagm=-inf;}
}inline void ms(const int &k,const int &l,const int &r)
{int p1=Lson,p2=Rson,mid=l+r>>1;maintain(p1,l,mid);maintain(p2,mid+1,r);if (t[p2].fi<t[p1].fi) swap(p1,p2);t[k].fi=t[p1].fi;if (t[p1].fi==t[p2].fi){t[k].se=min(t[p1].se,t[p2].se);t[k].tot=t[p1].tot+t[p2].tot;}else{t[k].tot=t[p1].tot;t[k].se=min(t[p1].se,t[p2].fi);}
}void build(int &k,const int &l,const int &r)
{k=++tot;if (l==r) {t[k]=(tree){0,0,1,-1,-inf,a[l],23333333333333333LL,0};return;}int mid=l+r>>1;build(Lson,l,mid);build(Rson,mid+1,r);t[k].tagm=-inf;t[k].cc=-1;ms(k,l,r);
}void add(const int &k,const int &l,const int &r)
{if (t[k].taga || -lim<t[k].tagm || t[k].cc!=-1) maintain(k,l,r);if (L<=l && r<=R){t[k].taga+=X;t[k].tagm=0;maintain(k,l,r);return;}int mid=l+r>>1;if (L<=mid) add(Lson,l,mid);if (mid<R) add(Rson,mid+1,r);ms(k,l,r);
}void change(const int &k,const int &l,const int &r)
{if (t[k].taga || -lim<t[k].tagm || t[k].cc!=-1) maintain(k,l,r);if (L<=l && r<=R){t[k].cc=X;maintain(k,l,r);return;}int mid=l+r>>1;if (L<=mid) change(Lson,l,mid);if (mid<R) change(Rson,mid+1,r);ms(k,l,r);
}void Min(const int &k,const int &l,const int &r)
{if (t[k].taga || -lim<t[k].tagm || t[k].cc!=-1) maintain(k,l,r);if (L<=l && r<=R){if (t[k].fi==0) Ans+=t[k].tot;return;}int mid=l+r>>1;if (L<=mid) Min(Lson,l,mid);if (mid<R) Min(Rson,mid+1,r);
}int main()
{read(n),read(m);for (int i=1;i<=n;i++) read(a[i]);build(Root,1,n);while (m--){read(type);read(L),read(R);if (type==1) read(X),change(1,1,n);if (type==2) read(X),add(1,1,n);if (type==3) Ans=0,Min(1,1,n),printf("%d\n",Ans);}
}

【BZOJ】4355: Play with sequence相关推荐

  1. 【BZOJ】1707: [Usaco2007 Nov]tanning分配防晒霜

    [算法]贪心扫描线(+堆) [题意]给定n头牛有区间[a,b],m个防晒霜值为ai,每个可以使用bi次,每次可以使包含它的区间涂到防晒霜,问最多被涂牛数. [题解] 参考:[bzoj1707]: [U ...

  2. 【BZOJ】【1041】【HAOI2008】圆周上的点

    数学 orz hzwer 完全不会做-- 很纠结啊,如果将来再遇到这种题,还是很难下手啊-- 引用题解: [分析]: 样例图示: 首先,最暴力的算法显而易见:枚举x轴上的每个点,带入圆的方程,检查是否 ...

  3. 【BZOJ】【1036】树的统计

    嗯这题是一道对树进行动态修改&查询的经典题目,可以拿来练习树链剖分~ 啊对于这种动态修改&查询的题目,我们最喜闻乐见的就是在一个序列上去做了,毕竟可以直接套各种数据结构模版啊,比如线段 ...

  4. 【BZOJ】【3442】学习小组

    网络流/费用流 orz zyf 裸的费用流,根据题目描述即可建出如下的图: S->i 费用表示每有一个加入第 i 个小组的学生,需要花的钱,由于是跟流量(人数)的二次方相关,所以要拆边--然后每 ...

  5. 【BZOJ】1711: [Usaco2007 Open]Dining吃饭

    [算法]最大流 [题解] S连向食物连向牛连向牛'连向饮料连向T. 经典的一个元素依赖于两个元素的建图方式. #include<cstdio> #include<algorithm& ...

  6. 【BZOJ】2099: [Usaco2010 Dec]Letter 恐吓信

    [题意]给定长度为n和m的两个字符串S和T,要求在字符串S中取出若干段拼成T(可重复取),求最小段数,n,m<=50000. [算法]后缀自动机 || 后缀数组 [题解]对串S建SAM,然后在上 ...

  7. 【BZOJ】1299: [LLH邀请赛]巧克力棒

    [算法]博弈论 [题解]这道题不是典型的SG函数题了. 不把它当成游戏看待,那么这道题是在说n个石子堆,每次可以加入若干个或进行Nim游戏. 我们当前先手,则考虑构造必败态来获胜. 当前已加入的NIm ...

  8. 【BZOJ】1013 [JSOI2008]球形空间产生器sphere

    [算法]高斯消元 [题解] 建矩阵; for i 找到同列绝对值最大数字; 交换; for k(行) j(列)(倒序)   除法; for i(倒序) for j 减去已知元素 除到右边; #incl ...

  9. 【BZOJ】4032: [HEOI2015]最短不公共子串(LibreOJ #2123)

    [题意]给两个小写字母串A,B,请你计算: (1) A的一个最短的子串,它不是B的子串 (2) A的一个最短的子串,它不是B的子序列 (3) A的一个最短的子序列,它不是B的子串 (4) A的一个最短 ...

最新文章

  1. JZOJ 5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜
  2. MySQL与oracle报错显示_Oracle中判断表是否存在再删除表避免报错与MySql和SqlServer的不同...
  3. linux 网卡 开启dhcp,Linux DHCP如何绑定指定的网卡???
  4. mysql5.6开发版_mysql-tutorial/2.2.md at master · liuxiaoqiang/mysql-tutorial · GitHub
  5. 数字金字塔(信息学奥赛一本通-T1258)
  6. [转]Windows Shell编程 第十五章【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988016】...
  7. C和C++ const的声明差异
  8. IDEA springboot maven 项目部署
  9. Python对文本文件的简单操作(一)
  10. java金蝶云单据查询_如果在单据上查或下查的“单据关联”界面添加功能
  11. 案例分享:Qt西门子PLC调试模拟工具(包含PLC上位机通讯,PLC服务器,读写Byte、Int、DInt、Real)(持续更新,当前v1.6.0)
  12. android怎样开启root权限管理,【经验】安卓手机怎么开启Root权限?
  13. unity lookat导致物体颠倒怎么解决_在Unity 2D中如何用一行代码实现LookAt的效果,以及向量归一化小总结...
  14. 利用asp.net Core开发webapi对接云之家智能审批数据互联控件
  15. PDF编辑方法,怎么把PDF其中一页删除
  16. 【Beta】Scrum Meeting 4
  17. ntoskrnl.exe损坏或丢失的解决方案
  18. 从底层到应用,那些数据人的必备技能
  19. 计算机安装内存配置,电脑内存条怎么安装 安装内存条的注意事项
  20. 蝶梦,五种架构演变史

热门文章

  1. Unity:SLG游戏画线模块
  2. java 绘图板_java绘图板
  3. saber与matlab,saber与matlab的比较 (1)
  4. saber与matlab,MATLAB与SABER联合仿真(Co-sim)遇到的问题
  5. 题注自动带章节编号 and怎样删除Word题注标签和编号间的空格?
  6. 一个程序员的日常书单(更新于2018/10/7)
  7. oracle的package是什么意思,Oracle的Package的作用及用法
  8. 590. N-ary Tree Postorder Traversal*
  9. 最详细最简单:最大公因数求法、辗转相除法、更相减损法,入门ACM,杭电水题,算法递归,初级算法题一看就懂
  10. 端口映射/dmz主机_在DMZ中使用Notes / Domino SMTP