传送门

这个题有点意思啊,我可能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. swift 函数篇章
  2. Mikrotik RouterOS 日常问题解析 ROS 5.4下载
  3. pandas 提取数字_经验轻松提取Meta原始文献特征
  4. Diango博客--1.Django的接客之道
  5. java中uri什么意思,java URI URL 个人理解。
  6. jq怎么回到顶部和回到尾部_回到学校系列为孩子们提供开放资源
  7. [第一章]一、面向对象思想的发展
  8. 面向对象(二) 继承/里氏替换
  9. 在vs编辑器里走来走去的快捷键
  10. 宝塔linux跑tomcat,宝塔面板环境的安装(Linux、Tomcat、Node.js、Windows等环境)
  11. ebay 后台HTML有尺寸宽度要求吗,eBay牛仔裤成为尺码问题重灾区,卖家上架需注意这几个方面...
  12. 密码学中PBC库的使用
  13. 汇编语言程序设计-钱晓捷(第五版)第一章-汇编语言基础知识
  14. C语言有限域的构造,有限域(3)——多项式环的商环构造有限域
  15. 64 位Instant Client连接64位PLSQL(win10)
  16. sql,linq,lamd比较使用
  17. 11月最新脉聊社交网站源码类似微博的社交源码 模板UI非常漂亮自适应手机版 重点是有原生AP
  18. linux的ioctl函数实现
  19. 获取最近一年十二月份的月份
  20. android 推送历史 coolapk,酷安(com.coolapk.market) - 11.2.2 - 应用 - 酷安

热门文章

  1. MSER+SIFT 图像的特征向量提取
  2. oleread.php,PHP的垃圾回收机制详解
  3. 景区ota常遇问题_景区票务管理系统能给景区带来销售业绩,你知道这些功能ma?...
  4. faster rcnn第二阶段loss出现nan_利用Faster_Rcnn训练模型时出现的问题
  5. 网络推广外包——网络推广外包专员表示网站营销推广重点细节要抓住
  6. 企业网络推广——浅析企业网络推广怎样看待企业网站的制作
  7. 浅析如何才能提高网站的信息交互能力?
  8. seo发展基本趋势优化专员必须知道!
  9. oracle dbms refresh,oracle 10g中dbms_mview.refresh()函数
  10. java数组去重_再谈JavaScript数组去重