bzoj3272 Zgg吃东西
题目描述:
bz
题解:
线段树模拟费用流。
想法和种树有点类似。
每次取区间内权值和最大的一段,然后整体乘$-1$,代表再次选中时会去掉之前的影响。
线段树维护一堆东西……
小白逛公园双倍快乐。乘$-1$时交换正反。
[滑稽]
代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 100050; template<typename T> inline void read(T&x) {T f = 1,c = 0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){c=c*10+ch-'0';ch=getchar();}x = f*c; } int n,m; int chg[50][2]; struct n_8 {int w,wl,wr,wu,pl,pr,pll,prr;n_8(){}n_8(int w,int wl,int wr,int wu,int pl,int pr,int pll,int prr):w(w),wl(wl),wr(wr),wu(wu),pl(pl),pr(pr),pll(pll),prr(prr){} }; void chkmax(int&a,int&b,int c,int d,int e,int f) {if(c>e)a=c,b=d;else a=e,b=f; } void chkmax(int&a,int&b,int&c,int d,int e,int f,int g,int h,int i) {if(d>g)a=d,b=e,c=f;else a=g,b=h,c=i; } void chkmin(int&a,int&b,int c,int d,int e,int f) {if(c<e)a=c,b=d;else a=e,b=f; } void chkmin(int&a,int&b,int&c,int d,int e,int f,int g,int h,int i) {if(d<g)a=d,b=e,c=f;else a=g,b=h,c=i; } void Swap(int&a,int&b) {swap(a,b);a=-a,b=-b; } n_8 operator + (n_8 a,n_8 b) {n_8 c;c.w = a.w+b.w;chkmax(c.wl,c.pll,a.wl,a.pll,a.w+b.wl,b.pll);chkmax(c.wr,c.prr,b.wr,b.prr,b.w+a.wr,a.prr);chkmax(c.wu,c.pl,c.pr,a.wu,a.pl,a.pr,b.wu,b.pl,b.pr);chkmax(c.wu,c.pl,c.pr,c.wu,c.pl,c.pr,a.wr+b.wl,a.prr,b.pll);return c; } struct segtree {int w[N<<2],wl[N<<2],wr[N<<2],wu[N<<2],pl[N<<2],pr[N<<2],pll[N<<2],prr[N<<2];int _wl[N<<2],_wr[N<<2],_wu[N<<2],_pl[N<<2],_pr[N<<2],_pll[N<<2],_prr[N<<2];bool res[N<<2];void update(int u){w[u] = w[u<<1]+w[u<<1|1];chkmax(wl[u],pll[u],wl[u<<1],pll[u<<1],w[u<<1]+wl[u<<1|1],pll[u<<1|1]);chkmax(wr[u],prr[u],wr[u<<1|1],prr[u<<1|1],w[u<<1|1]+wr[u<<1],prr[u<<1]);chkmin(_wl[u],_pll[u],_wl[u<<1],_pll[u<<1],w[u<<1]+_wl[u<<1|1],_pll[u<<1|1]);chkmin(_wr[u],_prr[u],_wr[u<<1|1],_prr[u<<1|1],w[u<<1|1]+_wr[u<<1],_prr[u<<1]);chkmax(wu[u],pl[u],pr[u],wu[u<<1],pl[u<<1],pr[u<<1],wu[u<<1|1],pl[u<<1|1],pr[u<<1|1]);chkmax(wu[u],pl[u],pr[u],wu[u],pl[u],pr[u],wr[u<<1]+wl[u<<1|1],prr[u<<1],pll[u<<1|1]);chkmin(_wu[u],_pl[u],_pr[u],_wu[u<<1],_pl[u<<1],_pr[u<<1],_wu[u<<1|1],_pl[u<<1|1],_pr[u<<1|1]);chkmin(_wu[u],_pl[u],_pr[u],_wu[u],_pl[u],_pr[u],_wr[u<<1]+_wl[u<<1|1],_prr[u<<1],_pll[u<<1|1]);}void reser(int u){res[u]^=1;w[u] = -w[u];Swap(wl[u],_wl[u]);Swap(wr[u],_wr[u]);Swap(wu[u],_wu[u]);swap(pl[u],_pl[u]);swap(pr[u],_pr[u]);swap(pll[u],_pll[u]);swap(prr[u],_prr[u]);}void pushdown(int u){if(res[u]){reser(u<<1);reser(u<<1|1);res[u] = 0;}}void build(int l,int r,int u){if(l==r){int x;read(x);w[u] = wu[u] = _wu[u] = wl[u] = _wl[u] = wr[u] = _wr[u] = x;pl[u]=pr[u]=pll[u]=prr[u]=_pl[u]=_pr[u]=_pll[u]=_prr[u]=l;return ;}int mid = (l+r)>>1;build(l,mid,u<<1);build(mid+1,r,u<<1|1);update(u);}void insert(int l,int r,int u,int qx,int d){if(l==r){w[u] = wu[u] = _wu[u] = wl[u] = _wl[u] = wr[u] = _wr[u] = d;return ;}pushdown(u);int mid = (l+r)>>1;if(qx<=mid)insert(l,mid,u<<1,qx,d);else insert(mid+1,r,u<<1|1,qx,d);update(u);}void erase(int l,int r,int u,int ql,int qr){if(l==ql&&r==qr){reser(u);return ;}pushdown(u);int mid = (l+r)>>1;if(qr<=mid)erase(l,mid,u<<1,ql,qr);else if(ql>mid)erase(mid+1,r,u<<1|1,ql,qr);else erase(l,mid,u<<1,ql,mid),erase(mid+1,r,u<<1|1,mid+1,qr);update(u);}n_8 query(int l,int r,int u,int ql,int qr){if(l==ql&&r==qr)return n_8(w[u],wl[u],wr[u],wu[u],pl[u],pr[u],pll[u],prr[u]);pushdown(u);int mid = (l+r)>>1;if(qr<=mid)return query(l,mid,u<<1,ql,qr);else if(ql>mid)return query(mid+1,r,u<<1|1,ql,qr);else return query(l,mid,u<<1,ql,mid)+query(mid+1,r,u<<1|1,mid+1,qr);} }tr; int main() {read(n);tr.build(1,n,1);read(m);int op,x,y,w;for(int i=1;i<=m;i++){read(op),read(x),read(y);if(!op)tr.insert(1,n,1,x,y);else{read(w);n_8 tmp = tr.query(1,n,1,x,y);int ans = 0;for(int j=1;j<=w;j++){if(tmp.wu>0){ans+=tmp.wu;chg[j][0]=tmp.pl,chg[j][1]=tmp.pr;tr.erase(1,n,1,tmp.pl,tmp.pr);tmp = tr.query(1,n,1,x,y);}else{w = j-1;break;}}printf("%d\n",ans);for(int j=1;j<=w;j++)tr.erase(1,n,1,chg[j][0],chg[j][1]);}}return 0; }
View Code
压行大法好。
转载于:https://www.cnblogs.com/LiGuanlin1124/p/10763172.html
bzoj3272 Zgg吃东西相关推荐
- 连你的免疫系统都拒绝996:半夜吃东西更容易拉肚子 | Cell
博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 晚上了,又到了各种食物诱惑力plus的时候. 但是肠道处的免疫细胞却表示:加班达咩. 而此时的我be like: 结果第二天,半夜吃的夜宵就 ...
- 拉肚子,不能吃东西的痛苦
昨晚临睡前穿着睡衣就上网,一上网就忘了时间,然后就着凉了. 今天起床就开始拉肚子,拉的人都软掉了,还不能乱吃东西. 妈妈禁止我吃所有的零食.水果,三餐都是吃那些没油水的咚咚,哭啊~~~ 一天人都没力气 ...
- 健身前到底该不该吃东西
空腹健身或致猝死 空腹健身轻则会在运动时头晕目眩,重则会导致血液中的游离脂肪酸明显增高,脂肪酸如果过量的话,就会出现损害心肌的"毒物",引起心律异常,甚至可能导致猝死.有科学研究表 ...
- 激烈运动后吃东西不会胖
激烈运动后吃东西不会胖 (2013-11-06 14:53:01) 转载▼ 标签: 杂谈 激烈运动(无氧或有氧)后的30分钟内是补充碳水和蛋白质的黄金窗口.运动后因为肌肉纤维被破坏,身体内储存的m ...
- 吃东西前最好先念3遍解毒神咒
经常看到有关食品不安全的报道,我想大家是不是要养成吃东西前念解毒咒的习惯呢?而且很简单,念三遍,吹口气在食物上就可以了. 解毒神咒:"三拔辣,茄多." 这个咒,个人以为尤其给小孩子 ...
- 修·蓝博士:吃东西前一定要这样清理
你有没有发现,我们对吃进嘴里的东西也存在各式各样的记忆? 比如汉堡披萨是垃圾食品,蔬果是好东西要多吃,米面糖分高要少吃-- 其实食物是中性的,同样的食物对不同个体有不一样的作用.一起来看看修·蓝博士吃 ...
- 时间管理体会:1.不能中午大热天跑出去,消耗大、导致疲惫后,不易恢复 2. 小睡,比吃东西还管用
中午1:30~3点,到华强北取修好的手机,因为来回都是自行车,所以相当于中午强行军.. 回来做事还好,没赶紧很累,自然放凉的滇红下肚,很好味.很舒服.. 4点左右疲惫,回家办事+休息到4点40左右, ...
- 在办公室吃东西的同事,长点心吧!
有很多上班族会因为各种原因在办公室吃东西.解饿.解闷.解乏.解困--那你会在办公室吃东西吗?你介意同事在办公室吃东西吗?近日,前程无忧围绕这一主题收集了几位网友的看法,来看一下吧. 吃就吃了,麻烦考虑 ...
- 吃东西时出汗多是病吗?
吃东西时出汗多是病吗? 人民健康网 问:我一吃东西,特别是辣的.刺激性的东西,额头部就会出很 ...
最新文章
- C语言playsoundw函数,使用inline hook实现修改PC微信通知铃声-哥哥微信来了
- 注释符、快捷键、变量及其命名规则
- Java运行时动态加载类之ClassLoader加载class及其依赖jar包
- gravity与Layout_gravity的区别
- html 自动滚动到底部,Javascript实现DIV滚动自动滚动到底部的代码
- SiriKit 描述
- Ngrok让你的本地Web应用暴露在公网上
- 2022电工杯数学建模A题目思路总结分享
- android地图旋转监听,ArcGIS for Android示例解析之地图旋转-----MapRotation
- 计算机光驱启动设置,光驱启动怎么设置
- 轻松调整C盘分区大小
- 3万一5万新能源电动汽车,3万内的新能源电动轿车
- 小工具:批量替换文件夹下所有文件内容中的指定词
- android 多个aar合并,Android多模块构建合并aar解决方案
- 2022河南萌新联赛第(二)场:河南理工大学 C - 斩龙
- wsl无网络连接(转载)
- 考研英语 - word-list-16
- win10 x64中inlineHook SSDT里面的函数
- 淘宝联盟代码html无法显示,阿里妈妈的iconfont的引用问题
- R语言笔记-R语言数据挖掘方法及应用--1
热门文章
- WPS表格如何根据数据的不同显示不同的背景色
- vue组件销毁重置详解
- 武汉Scratch青少儿趣味编程公开课,强势来袭!
- No suitable driver
- arachni安装注意
- pycharm 导入python环境
- 测试工程师面试(1)
- 江西事业单位计算机专业知识真题,2015年江西事业单位考试计算机每日练习题(1月27日)...
- 搞懂回归和分类模型的评价指标的计算:混淆矩阵,ROC,AUC,KS,SSE,R-square,Adjusted R-Square
- Docker推送镜像到阿里云镜像仓库