传送门

这个题有点意思啊,我可能kd-tree的板子写的有点问题,查询的时候就是要暴力查左右儿子,记录的最大最小值毫无作用,不清楚为什么。
这个题也算是比较简单的啦,由于是子树操作,只要想到按dfs序建树就没有什么问题了
其他的也就是一个区间覆盖,没有什么难度
代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
void read(int &x) {char ch; bool ok;for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
#define rg register
const int maxn=1e5+1,mod=1e9+7;
int cnt,T,n,c,m,ans,w,rt,id,dfn[maxn],lst[maxn],dep[maxn],pre[maxn*2],nxt[maxn*2],h[maxn];
struct oo{int d[2],mx[2],mn[2],sum,l,r,tag;}s[4*maxn];
void add(int x,int y)
{pre[++cnt]=y,nxt[cnt]=h[x],h[x]=cnt;pre[++cnt]=x,nxt[cnt]=h[y],h[y]=cnt;
}
void dfs(int x,int fa)
{dfn[x]=++id;for(rg int i=h[x];i;i=nxt[i])if(pre[i]!=fa)dep[pre[i]]=dep[x]+1,dfs(pre[i],x);lst[x]=id;
}
bool cmp(const oo&a,const oo&b){return a.d[w]<b.d[w];}
void update(int x)
{if(s[x].l){s[x].mn[0]=min(s[x].mn[0],s[s[x].l].mn[0]);s[x].mn[1]=min(s[x].mn[1],s[s[x].l].mn[1]);s[x].mx[0]=max(s[x].mx[0],s[s[x].l].mx[0]);s[x].mx[1]=max(s[x].mx[1],s[s[x].l].mx[1]);}if(s[x].r){s[x].mn[0]=min(s[x].mn[0],s[s[x].r].mn[0]);s[x].mn[1]=min(s[x].mn[1],s[s[x].r].mn[1]);s[x].mx[0]=max(s[x].mx[0],s[s[x].r].mx[0]);s[x].mx[1]=max(s[x].mx[1],s[s[x].r].mx[1]);}
}
int build(int l,int r,int d)
{int mid=(l+r)>>1;w=d;nth_element(s+l,s+mid,s+r+1,cmp);s[mid].mn[0]=s[mid].mx[0]=s[mid].d[0];s[mid].mn[1]=s[mid].mx[1]=s[mid].d[1];s[mid].sum=1;s[mid].tag=0;if(l!=mid)s[mid].l=build(l,mid-1,!d);else s[mid].l=0;if(r!=mid)s[mid].r=build(mid+1,r,!d);else s[mid].r=0;update(mid);return mid;
}
void pushdown(int x)
{int ls=s[x].l,rs=s[x].r;if(ls)s[ls].sum=s[ls].tag=s[x].tag;if(rs)s[rs].sum=s[rs].tag=s[x].tag;s[x].tag=0;
}
int get(int x,int l)
{if(s[x].d[0]==l)return s[x].sum;if(s[x].tag)pushdown(x);int ans=0;if(s[x].l&&l>=s[s[x].l].mn[0]&&l<=s[s[x].l].mx[0])ans=get(s[x].l,l);if(ans)return ans;                //这里是判断左子树是否找到的,我也不知道为什么可以找不到啊if(s[x].r)ans=get(s[x].r,l);    //然后找右儿子if(ans)return ans;                //希望大佬路过指点一下啊
}
void change(int x,int l,int r,int ll,int rr,int val)
{if(l<=s[x].mn[0]&&r>=s[x].mx[0]&&ll<=s[x].mn[1]&&rr>=s[x].mx[1]){s[x].sum=s[x].tag=val;return ;}else if(l<=s[x].d[0]&&r>=s[x].d[0]&&ll<=s[x].d[1]&&rr>=s[x].d[1])s[x].sum=val;if(s[x].tag)pushdown(x);if(s[x].l&&l<=s[s[x].l].mx[0]&&ll<=s[s[x].l].mx[1])change(s[x].l,l,r,ll,rr,val);if(s[x].r&&r>=s[s[x].r].mn[0]&&rr>=s[s[x].r].mn[1])change(s[x].r,l,r,ll,rr,val);
}
int main()
{read(T);while(T--){read(n),read(c),read(m);memset(h,0,sizeof h);cnt=id=ans=0;dep[1]=1; for(rg int i=2,x;i<=n;i++)read(x),add(i,x);dfs(1,0);for(rg int i=1;i<=n;i++)s[i].d[0]=dfn[i],s[i].d[1]=dep[i];rt=build(1,n,0);for(rg int i=1,x,y,z;i<=m;i++){read(x),read(y),read(z);if(!z)ans=(ans+1ll*i*get(rt,dfn[x]))%mod;else change(rt,dfn[x],lst[x],dep[x]-y,dep[x]+y,z);}printf("%d\n",ans);}
}

转载于:https://www.cnblogs.com/lcxer/p/10263817.html

bzoj4154[Ipsc2015]Generating Synergy相关推荐

  1. [学习笔记] 乱世之神杀疯了 —— K-D tree

    文章目录 K-D tree 建树 合并 插入 删除 查询(估价函数) 旋转坐标系 题目练习 [SDOI2012]最近最远点对 [Violet]天使玩偶/SJY摆棋子 [CQOI2016]K远点对 [国 ...

  2. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  3. CodeGen处理Synergy方法目录

    CodeGen处理Synergy方法目录 如果Synergy应用程序开发环境包括使用Synergy/DE xfServerPlus,则可以基于Synergy方法目录中包含的元数据生成代码.要启用此功能 ...

  4. Citrix Synergy 2014 重要信息快速一览

    今天的互联网.社交媒体的确强大,我们可以足不出户了解到9600公里(北京到LA的距离)之外的美国发生的事情.今天从Brain Madden大神那儿又扒到了一些经过提炼的关于Citrix Synergy ...

  5. 人群密度估计--Generating High-Quality Crowd Density Maps using Contextual Pyramid CNNs

    Generating High-Quality Crowd Density Maps using Contextual Pyramid CNNs ICCV2017 针对人群密度估计问题,本文主要从 i ...

  6. Transferring GANs: generating images from limited data 论文学习

    Transferring GANs: generating images from limited data 2018ECCV 论文链接:https://arxiv.org/pdf/1805.0167 ...

  7. The resource identified by this request is only capable of generating responses with characteristics

    [转]今天在调试springMVC的时候,在将一个对象返回为json串的时候,浏览器中出现异常: The resource identified by this request is only cap ...

  8. Synergy 共享键盘和鼠标

    直接安装Synergy 不行的话加配置文件 ➜ ~ cat synergy.conf section: screenslab712-PC:ckboss-HP: end section: linksck ...

  9. 揭秘HPE的最新一代组合式基础设施Synergy

    HPE公司的Synergy将成为下一代服务器的代表,将拥有超越超融合型基础设施系统的容量水平,且能够实现裸机配置.承载虚拟化工作负载以及容器化负载等多种用途--至少HPE自身对此抱有信心. 不过对这套 ...

最新文章

  1. 达特茅斯计算机专业师资力量如何,达特茅斯学院计算机科学computer science专业排名第126~150名(2020THE泰晤士高等教育世界大学排名)...
  2. 全球及中国现金回收机行业销售前景与运营效益分析报告2022版
  3. Codevs 1689 建造高塔
  4. [NOIP2016 提高组] 愤怒的小鸟
  5. matlab数字调音台,软件说明
  6. 使用反射+抽象工厂的数据访问(1)
  7. paip.c++ qt creator svn 设置以及使用总结.
  8. homestead.yaml配置详解
  9. 刚从阿里、头条面试回来,java处理excel文件数据
  10. 内存管理(一)MRC
  11. Rigidbody.AddForce 添加力
  12. php 单元测试 集成测试,关于单元测试?解决办法
  13. 1083: 阶乘尾数零的个数
  14. 【2021-01-29】JS逆向之shu美滑块参数分析
  15. 量化买卖压力选股(附源码)
  16. 商城系统运营模式有哪些?有什么优缺点?
  17. 商业银行的负债业务,包括活期存款、定期存款和储蓄存款
  18. 一个很有意思的flash游戏,蚂蚁蛋糕保卫战(antbuster)
  19. 关于自信,与自信的培养
  20. GDKOI2016 Day1 T2 不稳定的传送门

热门文章

  1. Android移动开发之【Android实战项目】DAY15-翻页效果原理
  2. 算法提高 邮票面值设计
  3. 怎样利用超图客户端打点_渗透测试——XSS利用工具BeEF攻击演示
  4. php修改http header,php header函数的常用http头设置
  5. 网络推广外包专员浅析为何网站网络推广外包中有排名却没有转化率
  6. java inputstream类_Java高级[7]:DataInputStream相关类的使用
  7. 黑盒测试方法_黑盒测试方法 收集
  8. python2升级_把Python2.6升级到Python2.7(适用于把Python2升级到Python3)
  9. EventBus初解
  10. sphinx是支持结果聚类的——WHERE、ORDER BY和GROUP BY