2017.9.28 lca 失败总结
序号连续,,体现在树上一点关系都没有。。所以这一条性质用不上就只能暴力了
所以就需要考虑序号连续有什么用。
首先所求的是一个区间所以就可以用前缀和化成两个点←重要套路
然后求lca往上的距离就可以每个点往上+1,查询目标点往上的点里有几个一、 ←相当于离散差分
然后就可以把两端的位置都散进前缀和里
然后扫一遍就可以了、、
码:
#include<iostream>
#include<cstdio>
#define P 201314
using namespace std;
#include<vector>
#define zuo o<<1,l,mid
#define you o<<1|1,mid+1,r
#define ll long long
#define N 100005
int d[N],fu[N],sz[N],hson[N],top[N],dui[N],n,m,tot,a,b,op,fa;
ll c,ans[N],he[N*2],jbj[N*2];
vector<int>v[N],q[N],qq1[N],q2[N],qq2[N];
void dfs1(int o,int fa,int dis)
{int i;d[o]=dis;fu[o]=fa;sz[o]=1;for(i=0;i<v[o].size();i++){int nd=v[o][i];if(nd==fa)continue;dfs1(nd,o,dis+1);sz[o]+=sz[nd];if(sz[hson[o]]<sz[nd])hson[o]=nd; }
}
void dfs2(int o,int tap)
{int i;dui[o]=++tot;top[o]=tap;if(hson[o])dfs2(hson[o],tap);for(i=0;i<v[o].size();i++){int nd=v[o][i];if(nd==fu[o]||nd==hson[o])continue;dfs2(nd,nd); }
}
void up(int o)
{he[o]=(he[o<<1]+he[o<<1|1])%P;
}
void down(int o,int l,int r)
{if(jbj[o]>0){int mid=(l+r)>>1;jbj[o<<1]+=jbj[o];jbj[o<<1|1]+=jbj[o];he[o<<1]+=jbj[o]*(mid-l+1);he[o<<1|1]+=jbj[o]*(r-mid);jbj[o<<1]%=P;jbj[o<<1|1]%=P;he[o<<1]%=P;he[o<<1|1]%=P;jbj[o]=0; }
}
void jia(int o,int l,int r)
{
if(a<=l&&r<=b)
{if(op==0){he[o]+=(r-l+1);he[o]%=P;jbj[o]++;jbj[o]%=P;}else{c+=he[o];c%=P; }return;
}
down(o,l,r);
int mid=(l+r)>>1;
if(a<=mid)jia(zuo);
if(b>mid)jia(you);
up(o);
}
void work1(int o)
{op=0;while(o!=0){a=dui[top[o]];b=dui[o];jia(1,1,n);o=fu[top[o]]; }
}
ll work2(int o)
{op=1;c=0;while(o!=0){a=dui[top[o]];b=dui[o];jia(1,1,n);o=fu[top[o]]; } return c;
}
int main()
{int i,j,l,r,x;scanf("%d%d",&n,&m);for(i=2;i<=n;i++){scanf("%d",&fa);fa++;v[fa].push_back(i);v[i].push_back(fa); }for(i=1;i<=m;i++){scanf("%d%d%d",&l,&r,&x);l++;r++;x++;q[l-1].push_back(x);qq1[l-1].push_back(i);q2[r].push_back(x);qq2[r].push_back(i);}dfs1(1,0,1);dfs2(1,1);for(i=1;i<=n;i++)
{
work1(i);
for(j=0;j<q[i].size();j++)
{ans[qq1[i][j]]-=work2(q[i][j]); ans[qq1[i][j]]%=P;
}
for(j=0;j<q2[i].size();j++)
{
ans[qq2[i][j]]+=work2(q2[i][j]);ans[qq2[i][j]]%=P;
}
} for(i=1;i<=m;i++){printf("%lld\n",(ans[i]+P)%P); }
}
2017.9.28 lca 失败总结相关推荐
- 《麻省理工科技评论》:2018年18大科技趋势,2017年7大失败技术
来源:科技周 摘要:2018 年伊始,许多科技大势仍在继续,正如比尔·盖茨所说,"大多数人高估了某种技术的短期价值,低估了其长期价值."同样,大多数的年度预测会高估了一年内一些事件 ...
- 易语言调试工具 code by:↖星空·之上↗ Ver:2.0 (2017/5/28更新)
目前测试了win7 32 64位可以使用,win10右键以管理员身份运行. 支持Hook易语言静态编译和非静态编译的程序! 注意:XP不兼容,不能用. Ver1.1 (17:12 2017/4/2 ...
- 找不到mfc140u.dll或者Microsoft Visual C++ 2017 Redistributable一直安装失败解决
找不到mfc140u.dll 安装后提示这个问题,我将xshell卸载重新安装后发现安装过程中提示Microsoft Visual C++ 2017 Redistributable一直安装失败,所以问 ...
- 2017.10.28 管道取珠 失败总结
这个题有一个新套路: ∑ai^2 要知道一般的计数题是∑ai,,所以这多乘了一个自己有什么意义呢? 于是想到,两两枚举,加起来正好是ai^2:: 所以就有一个想法,枚举两种取法, 然后就是插数dp, ...
- 【补档2017.12.28】我的2017-漫长的苦痛与渐入佳境的愤怒
2017的第一个季度我一直在想用瑞萨做一款飞控出来,选传感器到AD画板再到e2studio新建工程,之所以这么笃信瑞萨,是因为我当时满脑子想着我要去日本,电子设计国赛日企瑞萨赞助,控制题必考四轴,做出 ...
- NetworkX玩一下 --update@2017.06.28
写在前面的话 She is compelling,spectral, fascinating, an unforgettably unique performer 在写NetworkX的时候我想起来一 ...
- 2017.10.18 开店 失败总结
噩梦+级别的题,最近的题又难想又难调,还都是第一次打 以前做过和这个题很像的题,,但并没有想到. 注意前缀和的应用,似乎很多题都想不到用前缀和化成点. 然后就是套路:每个点到一个点的距离==每个点到根 ...
- 2017.10.11 灾难 失败总结
想了一上午没有结果,主要是因为原图搜索性太强,,就是每个点的影响虽然是固定的,但决策是需要遍历的.. 所以不能抽象成数字拓扑思考,不然同样的影响会被访问多次,却因为目标点的状态不同 而无法继续化简 ...
- 2017.9.24 森林 失败总结
这个题就不能链剖了,,必须老老实实用dfs序 dfs序真简单啊..然而树上路径做多了似乎就只会链剖了 和正常树上距离一样,只不过搬到了主席树上. 然后加边就只要启发式合并即可.注意暴力重构 似乎能li ...
最新文章
- 大一计算机在线考试,Word 大一计算机考试操作题
- iOS多线程开发(三)---Run Loop(一)
- 'ascii' codec can't encode characters in position 20-24:ordinal not in range(128)报错根本解决办法
- 在Ubuntu 18.04上安装和使用Tesseract 4
- 你需要熟练运用的12个命令行工具
- linux (centos7)安装3.7.8
- Oracle中on和where的区别
- 山东大学计算机学院交叉,Xueying Qin
- vue中组件的data为什么是一个函数
- 未来软件开发的主流方向:规则引擎 (Rule Engine)
- 大数据预测实战-随机森林预测实战(二)-随机森林回归模型
- 我知道的Activity
- 红手指云手机屏蔽方案
- 身份证复印件正确签注写法 -- 很重要!
- 数字孪生是什么,数字孪生能干什么?一文读懂
- HDR视频色调映射算法(之四:Display adaptive TMO)
- Leetcode-数据结构-121. 买卖股票的最佳时机
- 1949-2020年全国31省铁路里程数据
- 鬼谷子:大胸怀、大格局、成大事者,一定要看懂这三句话
- 21个在网页设计的精美图标使用灵感
热门文章
- C++ 链表 leetcode习题总结
- Head First设计模式读书笔记九 第十章 状态模式
- matlab 十字路口左转
- 【Paper-Attack】Attacking Graph-Based Classification without Changing Existing Connections
- Spark vs. MapReduce 时间节约66%,计算节约40%
- MySQL最基础的操作
- php dio获取串口数据,flutter通过dio读取二进制数据,比如通过api接口读取图片
- Java基础02 位运算符<<、>>
- debian linux vnc,Debian 如何配置安装Xfce桌面+VNC远程桌面服务
- python制作的游戏如何转化为swf_如何从python生成swf格式的幻灯片?