博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
877E - Danil and a Part-time Job
阅读量:6370 次
发布时间:2019-06-23

本文共 1430 字,大约阅读时间需要 4 分钟。

给一颗树,结点有权值,更新子树所有结点,查询结点子树的和;

思路参考我

转换完之后就是区间更新和查询,然后更新sum就是把开关的房间调换一下;
更新add值就用对2取余,不能用异或~~(刚开始想着用异或1,后来发现,add的值会超过1)
代码(

注意main() 函数里    A[L[i]]=a; 调试了无数次才发现是这里的问题
因为把结点按照DFS序重新编号后,L[i]才是线段树维护序列的下标;

#include 
#include
#include
#include
#define mem(x) memset(x,0,sizeof(x))#define ls l,m,rt<<1#define rs m+1,r,rt<<1|1using namespace std;const int N=200010;vector
G[N];int sum[N<<2],L[N],R[N],A[N],add[N<<2];int fa[N];int vv=0;void init(int n){ for(int i=1;i
";for(int i=1;i<=7;i++)cout<
<<' ';cout<
>1; build(ls);build(rs); pu(rt);}void update(int L,int R,int l,int r,int rt){ if(L<=l&&r<=R) { sum[rt]=(r-l+1)-sum[rt]; add[rt]=(add[rt]+1)%2; return ; } int m=(l+r)>>1; pd(rt,m-l+1,r-m); if(L<=m)update(L,R,ls); if(R>m)update(L,R,rs); pu(rt);}int query(int L,int R,int l,int r,int rt){ //cout<<"add-->";for(int i=1;i<=20;i++)cout<
<<' ';cout<
";for(int i=1;i<=20;i++)cout<
<<' ';cout<
>1; pd(rt,m-l+1,r-m); int ans=0; if(L<=m)ans+=query(L,R,ls); if(R>m)ans+=query(L,R,rs); pu(rt); return ans;}int main(){ int n,m; while(~scanf("%d",&n)) { int a; init(n); for(int i=2;i<=n;i++) { scanf("%d",&a); fa[i]=a; //G[i].push_back(a); G[a].push_back(i); } dfs(1); for(int i=1;i<=n;i++) { scanf("%d",&a); A[L[i]]=a; } //cout<<"L[2]="<
<<' '<<"R[2]"<
<

转载于:https://www.cnblogs.com/alonglyn/p/9953958.html

你可能感兴趣的文章
服务器架构
查看>>
【Android学习】Android studio 使用AIDL
查看>>
【20160924】GOCVHelper MFC增强算法(2)
查看>>
阿里云安全肖力:云的六大安全基因助力企业构建智能化安全体系
查看>>
豆瓣阅读报告生成器
查看>>
building with Gulp
查看>>
首个不怕被盗取生物特征的生物识别技术问世
查看>>
Java虚拟机管理的内存运行时数据区域解释
查看>>
OpenPOWER全产业链协同打通大数据Hadoop的再创新轨道
查看>>
阿里巴巴并购安全公司翰海源
查看>>
连云存储魔力象限都进不了,就别提三年之内中国第一了吧!
查看>>
为什么“私有云”计算值得考虑
查看>>
《OpenACC并行程序设计:性能优化实践指南》一 2.3 描述数据移动
查看>>
《数据虚拟化:商务智能系统的数据架构与管理》一 1.7 数据虚拟化的技术优势...
查看>>
新华三新IT 以开放之力助新农信发展
查看>>
企业高效研发实践专场,加速研发效能体系升级
查看>>
为啥神经网络里的BP算法花了那么久才被发明?
查看>>
iOS编程中throttle的那些事
查看>>
智能数据连接世界
查看>>
BMC报告:数字化业务驱动对大型机的需求
查看>>