bzoj

sol

每个位置维护一棵平衡树,每次插入的时候更新答案即可。
至于位置离散的话,开了\(map\)不就好了么。。。

#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
int gi(){int x=0,w=1;char ch=getchar();while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();if (ch=='-') w=0,ch=getchar();while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return w?x:-x;
}
#define pi pair<int,int>
#define mk make_pair
#define cmax(a,b) (a<b?a=b:a)
const int N = 4e5+5;
int n,m,w[N],val[N],pos[N],rt[N],tot,tj[N],sq[N],fa[N],ch[2][N],sz[N],tt[N],ts[N],S[N];
map<pi,int>M;
bool son(int x){return x==ch[1][fa[x]];
}
void pushup(int x){sz[x]=sz[ch[0][x]]+1+sz[ch[1][x]];val[x]=max(w[x],max(val[ch[0][x]],val[ch[1][x]]));
}
void cover(int x,int _t,int _s){cmax(tj[x],_t);cmax(sq[x],_s);cmax(tt[x],_t);cmax(ts[x],_s);
}
void pushdown(int x){if (ch[0][x]) cover(ch[0][x],tt[x],ts[x]);if (ch[1][x]) cover(ch[1][x],tt[x],ts[x]);tt[x]=ts[x]=0;
}
void rotate(int x){int y=fa[x],z=fa[y],c=son(x);ch[c][y]=ch[c^1][x];if (ch[c][y]) fa[ch[c][y]]=y;fa[x]=z;if (z) ch[son(y)][z]=x;ch[c^1][x]=y;fa[y]=x;pushup(y);
}
void splay(int x,int goal){S[S[0]=1]=x;for (int i=x;fa[i];i=fa[i]) S[++S[0]]=fa[i];while (S[0]) pushdown(S[S[0]--]);for (int y=fa[x];y!=goal;rotate(x),y=fa[x])if (fa[y]!=goal) son(x)^son(y)?rotate(x):rotate(y);pushup(x);if (!goal) rt[pos[x]]=x;
}
void insert(int y){if (!rt[pos[y]]) {rt[pos[y]]=y;pushup(y);return;}cover(rt[pos[y]],w[y],sz[rt[pos[y]]]);cmax(tj[y],val[rt[pos[y]]]);cmax(sq[y],sz[rt[pos[y]]]);int x=rt[pos[y]];while (233){pushdown(x);if (y<x)if (!ch[0][x]){fa[ch[0][x]=y]=x;splay(y,0);return;}else x=ch[0][x];elseif (!ch[1][x]){fa[ch[1][x]=y]=x;splay(y,0);return;}else x=ch[1][x];}
}
int pre(int y){int x=ch[1][y];while (ch[0][x]) pushdown(x),x=ch[0][x];splay(x,y);return x;
}
void erase(int y){splay(y,0);if (!ch[1][y]) {fa[rt[pos[y]]=ch[0][y]]=0;ch[0][y]=0;return;}int x=pre(y);fa[rt[pos[y]]=fa[ch[0][x]=ch[0][y]]=x]=0;ch[0][y]=ch[1][y]=0;pushup(x);
}
void dfs(int x){if (!x) return;pushdown(x);dfs(ch[0][x]);dfs(ch[1][x]);
}
int main(){n=gi();for (int i=1;i<=n;++i){w[i]=gi();int x=gi(),y=gi();if (!M[mk(x,y)]) M[mk(x,y)]=++tot;pos[i]=M[mk(x,y)];insert(i);}m=gi();while (m--){int v=gi(),x=gi(),y=gi();if (!M[mk(x,y)]) M[mk(x,y)]=++tot;erase(v);pos[v]=M[mk(x,y)];insert(v);}for (int i=1;i<=tot;++i) dfs(rt[i]);for (int i=1;i<=n;++i) printf("%lld\n",1ll*tj[i]*sq[i]);return 0;
}

转载于:https://www.cnblogs.com/zhoushuyu/p/9307350.html

[BZOJ2827]千山鸟飞绝相关推荐

  1. 一个还在武汉的程序员 之 千山鸟飞绝,万径人踪灭

    2.4号 晚上 我突然开始呼吸困难,近乎到睡不着的地步了. 我开始大口呼吸.轻度咳嗽.心跳有时很快. 还有最后一瓶,藿香正气水 这是我最后的希望. 我终于喝了它.好受了一些.迷迷糊糊一直到3点才睡着. ...

  2. 2827: 千山鸟飞绝 splay打标记

    Description 话说有一天doyouloveme和vfleaking到山里玩.谁知doyouloveme刚刚进山,所有的鸟儿竟被他的神犇气场给惊得全部飞走了.vfleaking顿时膜拜不已. ...

  3. iOS实录15:浅谈iOS Crash

    导语:在当前的iOS开发中,虽然ARC为开发者解决了手动内存管理时代 的许多麻烦,但是内存方面的问题依然是产生iOS Crash的元凶之一,本文介绍内存方面,有关僵尸对象.野指针.内存泄漏.废弃内存这 ...

  4. [POI2008] Poc (原名 Trians) Treap+Hash

    这个题和千山鸟飞绝体现出了一种用平衡树解决动态集合问题,主要套路就是蜜汁标记. 这个题我一开始用替罪羊树搞了一下对了28个点,后来我换成了Treap一搞对了14个点,再后来发现被卡了Hash我竟然在自 ...

  5. OSChina 周四乱弹 —— 熊孩子毁灭世界

    2019独角兽企业重金招聘Python工程师标准>>> 小伙伴们赶快起床,开源中国要出大事啦~ 为方便大家搜索开源软件,开源中国决定整理 IT 公司开源软件.初步列表不一定完善,小伙 ...

  6. 三、Python-列表

    三.Python-列表 一.序列:是一块用于存放多个值的连续内存空间,并且按一定顺序排列,可以通过索引取值 索引:从左到右的索引从0开始依次增加的正整数:从右到左的索引为-1开始的复数 切片(分片): ...

  7. OSChina 周三乱弹——真相往往令人内牛满面

    2019独角兽企业重金招聘Python工程师标准>>> 工作累了,下班和基友一起喝点酒没啥,喝大了可就.... @李察德-泰森 刚才发生了什么 快,告诉你妈妈,因为头发没竖起来 @s ...

  8. 1024程序员节:心疼被段子手黑得最惨的你们

    今天是程序员们的节日,同样身穿着格子衫的小鱼儿也一起来凑热闹啦~ 你们有撞衫的嘛? 有一个人,姓程,名序员,今天对他来说是个伟大的日子,因为今天是10.24 问:1024是什么? 游戏?2的十次方?某 ...

  9. 小学三年级另类语文题难住大学副教授(图)

    看到这些题蔡先生也犯难 记者 阚旋 摄 小学三年级的语文卷,不仅有你想不到的,也还有你做不到的. 昨日,一套小学生三年级语文作业题,难住了长春某大学副教授蔡先生. 两天答完159个小题 "这 ...

  10. python怎么变成竖行_用python实现古诗词横板竖版显示 【二维列表的使用】

    案例展示用python实现古诗词横竖两种版本效果图 实现的代码如下: #古诗顺序倒叙读 str1="千山鸟飞绝" str2="万尽人踪灭" str3=" ...

最新文章

  1. 闭包函数python_Python--函数对象闭包函数
  2. 源码安装python
  3. 计算机在材料科学中的应用计算机在浓度场中的数值模拟研究,计算机在浓度场中的数值模拟研究.doc...
  4. 吐槽net下没有靠谱的FastDFS的sdk之使用thrift实现JAVA和C#互通
  5. html元素以开始标签起始,HTML文本
  6. 图论--2-SAT--poj 3678-Katu Puzzle(模板题)
  7. 单人存档_R星:会为GTA做更多单人内容,steam圣诞特惠即将开启,2077坏档BUG,那个游戏重回steam销量榜,Epic喜加一...
  8. Asia Hong Kong Regional Contest 2016
  9. Noodle.ai的Atlas机器学习(ML)框架第1部分:构建AI应用程序面临的挑战
  10. 液晶屏接口-LVDS
  11. SuperMap 三维模型数据制作
  12. 爬取网易严选某种衣服商品数据,实现可视化,结论有点吓人
  13. 手机关机的java代码_Android关机界面代码
  14. CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法...
  15. Problem Set 1
  16. ubuntu下,在QT中利用科大讯飞语音库实现语音合成TTS
  17. mark mark mark
  18. 用MATLAB的函数scatter()绘制散点图
  19. java模拟excel排序_Apache-POI在excel中排序行
  20. 如何做浏览器兼容性测试?教你几招

热门文章

  1. 计算机网络应用云计算,计算机网络云计算技术应用
  2. 建立一个学生的简单信息表 c语言,简单的学生信息表
  3. 浏览器打开html文件特别慢,打开网页慢是什么原因,教您打开网页慢怎么解决
  4. 安装telnet服务
  5. numpy.take()用法
  6. 糖尿病会对视网膜造成影响吗?
  7. LCP 03. 机器人大冒险-力扣双百代码
  8. LSF COMMAND bhist
  9. docker安装kafka和zookeeper
  10. Win10禁用驱动签名,进入测试模式