摘要: 题面: 给一颗以1为根的树。 每个点有两个权值:vi, ti,一开始全部是零。 Q次操作: 读入o, u, d o = 1 对u到根上所有点的vi += d o = 2 对u到根上所有点的ti += vi * d 最后,输出每个点的ti值(n, Q <= 100000) 有50%的数据N,Q <= 阅读全文
posted @ 2016-10-09 19:20 czllgzmzl 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 用单调栈的话不严格的O(n^3)可以轻松艹过去,统计的时候要差分。 可以发现,对于一个单调栈里的元素,从它进栈到出栈都会重复类似的计算。。再差分一波后就可以只在出栈的时候计算一下了。 具体的话看代码吧。。 O(n^3): 1 #include<cstdio> 2 #include<iostream> 阅读全文
posted @ 2016-10-09 18:44 czllgzmzl 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 到现在还是不会写系列,直接贴题解了。 http://www.51nod.com/question/index.html#!questionId=1157 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<al 阅读全文
posted @ 2016-10-09 18:37 czllgzmzl 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 给你一坨矩形,问这些矩形组成的所有多边形的周长之和。 分别求竖着的边和横着的边。 离散化后线段树,维护当前行(或者列)有多少没在多边形里的,添加矩形就变成添加、删除线段。 每次加线段或删线段时累加一下贡献(加线段时的贡献就是加完后那条线段里有多少个位置变成在多边形里,删线段时的贡献就是删完后有多少个 阅读全文
posted @ 2016-10-09 15:41 czllgzmzl 阅读(257) 评论(0) 推荐(0) 编辑