任意一个平衡树+hash表(map也可以)

平衡树每个节点维护:

当前子树 最大值、size   下传标记 最大值、sizemax

pushdown时候直接更新最后的ans就行了,不用记下来(我就是因为这个炸了...)

hash的话

map比较慢 hash表不用双取mod

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <map>
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define ull unsigned long long
#define s(x) ((x)->s)
#define v(x) ((x)->v)
#define bv(x) ((x)->bv)
#define bs(x) ((x)->bs)
#define ls(x) ((x)->ch[0])
#define rs(x) ((x)->ch[1])
#define order(x) ((x)->order)
#define fix(x) ((x)->fix)
#define JI(x,y) (((ull)(x)*p+(y))*p)
using namespace std;
const int T_T=330006;
const int N=30006;
const int p=233333333;
const int mod=2333333;
inline int read()
{char q=getchar();int ans=0,flag=1;while(q<'0'||q>'9'){if(q=='-')flag=-1;q=getchar();}while(q>='0'&&q<='9'){ans=ans*10+q-'0';q=getchar();}return ans*flag;
}int ansv[N],anss[N];
int n,cnt,m;
int w[N],pos[N];struct treap
{int s,v;int bs,bv;int fix;int order;treap *ch[2];treap(int val,int sz,int oo){v=val;s=sz;bs=0;bv=0;fix=rand();order=oo;}
}*null;treap* newtreap(int val,int sz,int oo)
{treap *temp=new treap(val,sz,oo);ls(temp)=null;rs(temp)=null;return temp;
}struct Treap
{treap *root;void pushup(treap *x){if(x==null)return ;v(x)=max( max(v(ls(x)),v(rs(x))),w[order(x)] );s(x)=s(ls(x))+s(rs(x))+1;}void pushdown(treap *x){if(x==null)return ;if(ls(x)!=null){if(bv(x)) ansv[order(ls(x))]=max( ansv[order(ls(x))],bv(x) ),bv(ls(x))=max( bv(ls(x)),bv(x) );if(bs(x)) anss[order(ls(x))]=max( anss[order(ls(x))],bs(x) ),bs(ls(x))=max( bs(ls(x)),bs(x) );}if(rs(x)!=null){if(bv(x)) ansv[order(rs(x))]=max( ansv[order(rs(x))],bv(x) ),bv(rs(x))=max( bv(rs(x)),bv(x) );if(bs(x)) anss[order(rs(x))]=max( anss[order(rs(x))],bs(x) ),bs(rs(x))=max( bs(rs(x)),bs(x) );}bv(x)=bs(x)=0;}void lturn(treap *&x){treap *y=rs(x);pushdown(x);pushdown(y);rs(x)=ls(y);pushup(x);ls(y)=x;pushup(y);x=y;}void rturn(treap *&x){treap *y=ls(x);pushdown(x);pushdown(y);ls(x)=rs(y);pushup(x);rs(y)=x;pushup(y);x=y;}void add(int oo,treap *&x){if(x==null){x=newtreap(w[oo],1,oo);return ;}pushdown(x);if(oo<order(x)){add(oo,ls(x));if(fix(ls(x))>fix(x))rturn(x);}else{add(oo,rs(x));if(fix(rs(x))>fix(x))lturn(x);}pushup(x);}void add(int oo){if(root!=null){ansv[oo]=max( ansv[oo],v(root) );anss[oo]=max( anss[oo],s(root) );ansv[order(root)]=max( ansv[order(root)],w[oo] );anss[order(root)]=max( anss[order(root)],s(root) );bv(root)=max( bv(root),w[oo] );bs(root)=max( bs(root),s(root) );}add(oo,root);}void del(int oo,treap *&x){pushdown(x);if(oo==order(x)){if(ls(x)!=null&&rs(x)!=null){if(fix(ls(x))>fix(rs(x))){rturn(x);del(oo,rs(x));}else{lturn(x);del(oo,ls(x));}}else{treap *y=null;if(ls(x)!=null)y=ls(x);elsey=rs(x);delete x;x=y;}}elseif(oo<order(x))del(oo,ls(x));elsedel(oo,rs(x));pushup(x);}void del(int oo){del(oo,root);}void dfs(treap *&x){if(x==null)return ;pushdown(x);dfs(ls(x));dfs(rs(x));}void dfs(){dfs(root);}
}T[T_T];void DFS()
{for(int i=1;i<=cnt;++i)T[i].dfs();
}/*struct MAP
{int x,y;bool friend operator < (MAP a,MAP b){if(a.x==b.x)return a.y<b.y;return a.x<b.x;}
};map<MAP,int> mp;*/struct Hash
{struct hash{int order,next;ull w;}a1[mod];int first[mod],e;void clear(){mem(first,-1);e=0;mem(a1,0);}int add(ull w){int tt=w%mod;for(int i=first[tt];i!=-1;i=a1[i].next)if(a1[i].w==w)return a1[i].order;a1[e].order=++cnt;a1[e].w=w;a1[e].next=first[tt];first[tt]=e++;return cnt;}
}H;void out11()
{printf("cnt=%d\n",cnt);for(int i=1;i<=n;++i)printf("%d ",ansv[i]);printf("\n");for(int i=1;i<=n;++i)printf("%d ",anss[i]);printf("\n");
}int main(){//freopen("in.in","r",stdin);
H.clear();null=new treap(0,0,0);ls(null)=NULL;rs(null)=NULL;for(int i=0;i<T_T;++i)T[i].root=null;n=read();int temp,tin1,tin2,tin3;for(int i=1;i<=n;++i){tin1=read();tin2=read();tin3=read();w[i]=tin1;temp=H.add( JI(tin2,tin3) );pos[i]=temp;T[temp].add(i);}m=read();for(int i=1;i<=m;++i){tin1=read();tin2=read();tin3=read();temp=H.add( JI(tin2,tin3) );T[pos[tin1]].del(tin1);pos[tin1]=temp;T[temp].add(tin1);//printf("i=%d\n",i);//DFS();//out11();
    }DFS();for(int i=1;i<=n;++i)printf("%lld\n",(ll)ansv[i]*anss[i]);
}

bzoj_2827

转载于:https://www.cnblogs.com/A-LEAF/p/7598289.html

bzoj_2827_千山鸟飞绝相关推荐

  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 excel操作单元格_python 操作excel表格的方法
  2. Django 应用开发(2)
  3. VB.NET开发人员必备参考10本书目
  4. 将svg文件化成字体图标的步骤
  5. Linux命令之初出茅庐
  6. 通用编程_通用编程准则
  7. P2386 放苹果 方法一
  8. lms算法的verilog实现_数字通信同步技术的MATLAB与FPGA实现
  9. Python2 圆满落幕,Python 继续辉煌! | 原力计划
  10. (转载)Stackoverflow让我们变懒了?
  11. 无法使用内置管理员账户打开应用商店
  12. javascript实现锁定网页、密码解锁效果(屏幕保护效果)
  13. 安装MySQL绿色版本,不用装软件、不用装软件、不用装软件
  14. windows粘贴不了
  15. 高通开发笔记---yukon worknote
  16. 我的天呢!支付宝杀疯了!领取现金红包,太给力了吧,天天可领取!
  17. android 自定义view 动画效果,Android自定义view实现阻尼效果的加载动画
  18. BPM软件_K2签约龙光地产,为集团实现“千亿目标”保驾护航_全业务流程管理专家...
  19. 实验7-3-7 字符转换 (15 分)
  20. Pandas数据结构之DataFrame常见操作

热门文章

  1. js超简单实现图片旋转
  2. Android 打开应用商店评分
  3. 使用CLion开发STM32时无法生成hex文件的解决办法
  4. 基于U-Net模型的视网膜血管分割
  5. 博物馆 库房rfid_博物馆RFID综合管理解决方案
  6. 互联网产品经理的主要职责(产品经理工作职责)
  7. 关于robots协议
  8. Kotlin实战 | 语法糖,总有一颗甜到你(持续更新)
  9. wps excel 表格给一列数据添加相同的内容的方法
  10. Java 生成随机中文、英文姓名(上)