传送门

好珂怕……

树分块是什么东西啊……感觉好暴力……

直接贴一下好了->这里

  1. //minamoto
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<vector>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
  9. char buf[<<],*p1=buf,*p2=buf;
  10. template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
  11. inline int read(){
  12. #define num ch-'0'
  13. char ch;bool flag=;int res;
  14. while(!isdigit(ch=getc()))
  15. (ch=='-')&&(flag=true);
  16. for(res=num;isdigit(ch=getc());res=res*+num);
  17. (flag)&&(res=-res);
  18. #undef num
  19. return res;
  20. }
  21. char sr[<<],z[];int C=-,Z;
  22. inline void Ot(){fwrite(sr,,C+,stdout),C=-;}
  23. inline void print(int x){
  24. if(C><<)Ot();if(x<)sr[++C]=,x=-x;
  25. while(z[++Z]=x%+,x/=);
  26. while(sr[++C]=z[Z],--Z);sr[++C]='\n';
  27. }
  28. const int N=,SIZE=;
  29. int head[N],Next[N<<],ver[N<<],tot;
  30. inline void add(int u,int v){
  31. ver[++tot]=v,Next[tot]=head[u],head[u]=tot;
  32. }
  33. int n,m,cnt,w[N],bh[N],bt,fa[N],belong[N],bn[N<<],bv[N<<];
  34. struct Block{
  35. vector<int> a;
  36. Block(){a.clear();}
  37. inline void ins(int x){
  38. a.push_back(x);
  39. for(int i=a.size()-;i;--i)
  40. if(a[i-]>a[i]) swap(a[i-],a[i]);else break;
  41. }
  42. inline void update(int x,int k){
  43. int pos=lower_bound(a.begin(),a.end(),x)-a.begin();
  44. a[pos]=k;
  45. for(int i=pos;i;--i)
  46. if(a[i-]>a[i]) swap(a[i-],a[i]);else break;
  47. for(int i=pos,s=a.size()-;i<s;++i)
  48. if(a[i]>a[i+]) swap(a[i],a[i+]);else break;
  49. }
  50. inline int query(int x){
  51. return a.end()-upper_bound(a.begin(),a.end(),x);
  52. }
  53. }bl[N];
  54. inline void add_bl(int u,int v){
  55. bv[++bt]=v,bn[bt]=bh[u],bh[u]=bt;
  56. }
  57. void dfs(int u,int f){
  58. fa[u]=f;
  59. if(bl[belong[f]].a.size()==SIZE){
  60. belong[u]=++cnt;
  61. bl[cnt].ins(w[u]);
  62. add_bl(belong[f],cnt);
  63. }
  64. else{
  65. belong[u]=belong[f],bl[belong[u]].ins(w[u]);
  66. }
  67. for(int i=head[u];i;i=Next[i]){
  68. if(ver[i]!=f) dfs(ver[i],u);
  69. }
  70. }
  71. int dfsbl(int u,int k){
  72. int ans=bl[u].query(k);
  73. for(int i=bh[u];i;i=bn[i])
  74. ans+=dfsbl(bv[i],k);
  75. return ans;
  76. }
  77. int dfsans(int u,int k){
  78. int ans=w[u]>k?:;
  79. for(int i=head[u];i;i=Next[i]){
  80. int v=ver[i];
  81. if(v==fa[u]) continue;
  82. if(belong[v]==belong[u]) ans+=dfsans(v,k);
  83. else ans+=dfsbl(belong[v],k);
  84. }
  85. return ans;
  86. }
  87. int main(){
  88. //freopen("testdata.in","r",stdin);
  89. n=read();
  90. for(int i=;i<n;++i){
  91. int u=read(),v=read();add(u,v),add(v,u);
  92. }
  93. for(int i=;i<=n;++i) w[i]=read();
  94. dfs(,);
  95. m=read();
  96. int ans=;
  97. while(m--){
  98. int opt=read(),u=read(),x=read();
  99. u^=ans,x^=ans;
  100. switch(opt){
  101. case :ans=dfsans(u,x);print(ans);break;
  102. case :bl[belong[u]].update(w[u],x);w[u]=x;break;
  103. case :{
  104. w[++n]=x,add(u,n),fa[n]=u;
  105. if(bl[belong[u]].a.size()==SIZE){
  106. belong[n]=++cnt,bl[cnt].ins(w[n]);
  107. add_bl(belong[u],cnt);
  108. }
  109. else{
  110. belong[n]=belong[u],bl[belong[n]].ins(w[n]);
  111. }
  112. break;
  113. }
  114. }
  115. }
  116. Ot();
  117. return ;
  118. }

bzoj3720: Gty的妹子树(树分块)的更多相关文章

  1. BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3744 3744: Gty的妹子序列 Time Limit: 20 Sec  Memory ...

  2. BZOJ3720 Gty的妹子树 【树分块】

    题目 我曾在弦歌之中听过你, 檀板声碎,半出折子戏. 舞榭歌台被风吹去, 岁月深处尚有余音一缕-- Gty神(xian)犇(chong)从来不缺妹子-- 他来到了一棵妹子树下,发现每个妹子有一个美丽度 ...

  3. BZOJ3720 Gty的妹子树 询问分块、主席树

    传送门 学到了询问分块的科技-- 对于修改操作,每发生了\(S\)次修改就重构整棵树,小于\(S\)次的修改操作丢到一个队列里面. 对于每一次查询操作,先在主席树上查询当前子树内部大于\(k\)的节点 ...

  4. BZOJ3744 Gty的妹子序列(分块+树状数组)

    题意 询问区间内逆序对数  强制在线 1<=n<=50000 1<=m<=50000 题解 两个预处理f[i][j]为块i到j的逆序对数,s[i][j]前i块≤j的有多少个边角 ...

  5. 【BZOJ3720】Gty的妹子树 块状树

    [BZOJ3720]Gty的妹子树 我曾在弦歌之中听过你,檀板声碎,半出折子戏.舞榭歌台被风吹去,岁月深处尚有余音一缕……Gty神(xian)犇(chong)从来不缺妹子……他来到了一棵妹子树下,发现 ...

  6. bzoj 3744: Gty的妹子序列 主席树+分块

    3744: Gty的妹子序列 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 101  Solved: 34[Submit][Status] Descr ...

  7. 【BZOJ3744】Gty的妹子序列 分块+树状数组

    [BZOJ3744]Gty的妹子序列 Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzo ...

  8. [BZOJ 3731] Gty的超级妹子树 (树分块)

    [BZOJ 3731] Gty的超级妹子树 (树分块) 题面 给出一棵树(或森林),每个点都有一个值.现在有四种操作 1.查询x子树里>y的值有多少个 2.把点x的值改成y 3.添加一个新节点, ...

  9. BZOJ 3744 Gty的妹子序列 (分块 + BIT)

    3744: Gty的妹子序列 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1931  Solved: 570[Submit][Status][Dis ...

随机推荐

  1. 用express实现CORS跨域(上-简单请求)

    今天遇到了一个跨域请求登录验证的问题.所以有了尝试跨域的机会. 具体情景是,有一个登录界面写在名叫cas的站点上,但是相关的登录验证的后台接口是写在名叫earth的站点. 首先的反应是使用jsonp, ...

  2. hdu-5651 xiaoxin juju needs help(数学+gcd约分求阶乘)

    题目链接: xiaoxin juju needs help Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K ...

  3. 输入框input内容变化与onpropertychange事件的兼容

    一.输入框常用的几个事件 onblur 元素失去焦点. onchange 域的内容被改变. onclick 当用户点击某个对象时调用的事件句柄. ondblclick 当用户双击某个对象时调用的事件句 ...

  4. Silk codec的一些资料

    Skype表示它最近将开始向第三方开发人员和硬件制造商提供免版税认证(RF)的Silk宽带音频编码器. Silk下载地址如下 http://developer.skype.com/silk/SILK_ ...

  5. 【LeetCode】081. Search in Rotated Sorted Array II

    题目: Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would t ...

  6. bzoj 2648 SJY摆棋子 —— K-D树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2648 学习资料:https://blog.csdn.net/zhl30041839/arti ...

  7. 人物-IT-张志东:张志东

    ylbtech-人物-IT-张志东:张志东 张志东,广东东莞人,腾讯创办人之一,腾讯高级副总裁兼科技总裁,于1993年取得深圳大学理学学士学位,并于1996年取得华南理工大学计算机应用及系统架构硕士学 ...

  8. JSP标签和EL表达式

    1.jsp标签: sun原生的,直接jsp使用 <jsp:include> -- 实现页面包含,动态包含 <jsp:include page="/index.jsp&quo ...

  9. Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密

    转自:http://www.58player.com/blog-2537-87218.html 项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(b ...

  10. java ----一个函数传回多个值的总结

    java 一个函数如何返回多个值 参考方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过源代码来查看. 2.传入一个引用进去,修改引用的属性值.问 ...