splay和我的常数加到一起简直是灾难。。。
坐标没有用,把它离散掉。
然后splay维护一个最大值和次大值和最大size的标记。
插入的时候查询一下,打个标记。

#include <bits/stdc++.h>
using namespace std;
#define N 410000
#define M 810000
#define ll long long
#define ls(x) ch[x][0]
#define rs(x) ch[x][1]
#define which(x) (ch[fa[x]][1]==x)
#define icmp(x,y) (x^y ? v[x]^v[y] ? v[x]>v[y] ? 1:-1 : x>y ? 1:-1 :0)
const int inf=~0U>>1;
int n,m,cnt,tot;
int v[M],a[N],av[M],as[M],rem[N],root[N];
int size[M],L[N],R[N],l,r;
ll val[N],pos[N],org[N];
int ch[M][2],fa[M],mx[M],sx[M],sum[M];
char getc()
{static const int LEN = 4096;static char buf[LEN],*S=buf,*T=buf;if(S == T){T = (S=buf)+fread(buf,1,LEN,stdin);if(S == T)return EOF;}return *S++;
}
int read()
{static char ch;static int D;while(!isdigit(ch=getc()));for(D=ch-'0'; isdigit(ch=getc());)D=(D<<3)+(D<<1)+(ch-'0');return D;
}
void upd(int x)
{as[x]=max(as[x],sum[x]);int t=mx[x]==x ? sx[x]:mx[x];if(v[t]>v[av[x]])av[x]=t;
}
void cal(int x,int y)
{if(!x||!y||mx[x]==y||sx[x]==y)return;if(v[y]>v[mx[x]])sx[x]=mx[x],mx[x]=y;else if(v[y]>v[sx[x]])sx[x]=y;
}
void pushdown(int x)
{if(sum[x]){sum[ls(x)]=max(sum[ls(x)],sum[x]);sum[rs(x)]=max(sum[rs(x)],sum[x]);}cal(ls(x),mx[x]);cal(rs(x),mx[x]);cal(ls(x),sx[x]);cal(rs(x),sx[x]);upd(ls(x));upd(rs(x));mx[x]=sx[x]=0;sum[x]=0;
}
void pushup(int x)
{size[x]=size[ls(x)]+size[rs(x)]+1;}
void down(int x)
{if(fa[x])down(fa[x]);pushdown(x);
}
void rotate(int x)
{int y=fa[x],k=which(x);ch[y][k]=ch[x][k^1];ch[x][k^1]=y;ch[fa[y]][which(y)]=x;fa[x]=fa[y];fa[y]=x;fa[ch[y][k]]=y;pushup(y);pushup(x);
}
void splay(int x,int tar)
{down(x);while(fa[x]!=tar){int y=fa[x];if(fa[y]==tar)rotate(x);else{if(which(x)^which(y))rotate(x);else rotate(y);rotate(x);}}
}
void pre(int x,int y)
{if(!x)return;if(icmp(x,y)<0){if(icmp(x,l)>0)l=x;pre(ch[x][1],y);}else pre(ch[x][0],y);
}
void nex(int x,int y)
{if(!x)return;if(icmp(x,y)>0){if(icmp(x,r)<0)r=x;nex(ch[x][0],y);}else nex(ch[x][1],y);
}
int find(int x,int K)
{int t=size[ch[x][0]];if(t+1==K)return x;if(t>=K)return find(ch[x][0],K);return find(ch[x][1],K-t-1);
}
void build(int x,int y,int pos)
{root[pos]=x;L[pos]=x;R[pos]=y;ch[x][1]=y;v[x]=-1;v[y]=inf;fa[y]=x;size[x]=2;size[y]=1;
}
void del(int pos,int x)
{int &rt=root[pos];l=L[pos];r=R[pos];pre(rt,x);nex(rt,x);splay(l,0);rt=l;splay(r,l);size[l]--;size[r]--;ch[r][0]=fa[x]=0;
}
void ins(int pos,int x)
{int &rt=root[pos];if(size[rt]>2){int t=find(rt,size[rt]-1);if(icmp(t,av[x])>0)av[x]=t;}l=L[pos];r=R[pos];pre(rt,x);nex(rt,x);splay(l,0);rt=l;splay(r,l);size[l]++;size[r]++;ch[r][0]=x;fa[x]=r;size[x]=1;cal(rt,x);sum[rt]=max(sum[rt],size[rt]-3);upd(rt);
}
int main()
{n=read();for(int i=1,x,y;i<=n;i++){v[i]=read();x=read();y=read();org[i]=val[++cnt]=(ll)x*inf+y;}m=read();for(int i=1,x,y;i<=m;i++){a[i]=read();x=read();y=read();pos[i]=val[++cnt]=(ll)x*inf+y;}sort(val+1,val+1+cnt);cnt=unique(val+1,val+1+cnt)-val-1;tot=n;for(int i=1;i<=cnt;i++)build(tot+1,tot+2,i),tot+=2;for(int i=1;i<=n;i++){org[i]=lower_bound(val+1,val+1+cnt,org[i])-val;ins(org[i],i);}for(int i=1,t;i<=m;i++){t=a[i];del(org[t],t);pos[i]=lower_bound(val+1,val+1+cnt,pos[i])-val;org[t]=pos[i];ins(org[t],t);}for(int i=1;i<=n;i++){down(i);printf("%lld\n",(ll)v[av[i]]*as[i]);}return 0;
}

bzoj 2827 千山鸟飞绝 平衡树相关推荐

  1. BZOJ 3223 文艺平衡树

    BZOJ 3223 文艺平衡树 题意 一个 1~n 的序列,有m次询问,每次询问翻转其中的一个区间.输出最后的区间. 题解 这是一棵加lazy的平衡树-- 首先,翻转区间可以通过区间内所有节点的左右儿 ...

  2. bzoj 3224 普通平衡树 vactor的妙用

    3224: Tyvj 1728 普通平衡树 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

  3. BZOJ 3224 普通平衡树 treap or vector

    很明显这是一道treap的题,但看了黄学长的博客后,也让我大开了眼界,没想到vector也能用那么短的编码量把这道题AC,着实令我敬佩.这也提醒了我 STL 的重要性. 的确, 对于C++ 选手来说, ...

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

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

  5. BZOJ 3224: Tyvj 1728 普通平衡树【Treap】

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一些数 ...

  6. BZOJ#3786. 星系探索(平衡树,fhq-treap,弱化版ETT)

    BZOJ#3786. 星系探索 Solution 子树加,换fatherfatherfather(保证还是树),询问到根路径和. 树上路径求和不好动态维护,于是转化到序列上,维护一个括号序,dfndf ...

  7. 【BZOJ】3224: Tyvj 1728 普通平衡树

    [题意] 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数,因输出最小的排名) 4. 查询排名为x的数 5. 求x的前驱(前驱定义为小于x,且最 ...

  8. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家( 平衡树 )

    按鲜嫩程度排个序, 从大到小处理, 用平衡树维护价值 ---------------------------------------------------------------------- #i ...

  9. bzoj 3223: Tyvj 1729 文艺平衡树

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2853  Solved: 1602 [Submit][Status][Discuss] Descri ...

  10. BZOJ 3224: Tyvj 1728 普通平衡树 treap

    3224: Tyvj 1728 普通平衡树 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

最新文章

  1. MongoDB(一):简介
  2. STM32F0xx_EXIT中断配置详细过程
  3. 零点是结束,也是开始。
  4. AI 秒杀人类!OpenAI 击败 DOTA2 世界冠军 OG
  5. json文件使用tips
  6. python北京房价预测_python数据分析——北京房价分析
  7. 如何快速学习SAP系统软件?
  8. 一文读懂AlphaGo Zero算法
  9. word怎么把页面顺序倒过来_word设置倒序打印的方法
  10. matlab控制信号发生器,Matlab 跳频信号发生器
  11. Linux命令详解之 cp
  12. 按一个按钮会随机死人_有一个按钮,按下你会获得一千万,但会随机死一个人,你不用因此负责,你会按吗?...
  13. 直通车杀手,恶意点击软件开发咨询。 (0)
  14. JavaMail:使用163,QQ和本地服务器邮件发送
  15. AI高效学习路径总结
  16. 对于硬件成品测试,可以设计哪些测试用例?
  17. 数据吞吐高达 21 亿条!实时计算在贝壳找房的应用实践
  18. 通过Python的pytesseract库识别图片中的文字
  19. Android targetsdkversion理解
  20. python读取网络端口数据_在Python中从SNMP端口获取数据

热门文章

  1. 什么是友情链接?友情链接的好处及写法(图文)
  2. L13.linux命令每日一练 -- 第二章 文件和目录操作命令 -- lsattr和file命令
  3. 2021-06-13
  4. 蒙特卡洛_蒙特卡洛辍学
  5. 用户账号被盗,京东回应:都怪QQ!库克:从来没获取过FB用户数据!
  6. eact源码解析7.Fiber架构
  7. 拼字 公式_蒸汽机的未来,3D拼字游戏等等
  8. LCP 03 机器人大冒险(分析-计算运动周期)
  9. IBM Platform LSF在IC行业内的使用
  10. 大连到日本出差/旅游注意事项