传送门 解题思路 推了推式子发现是个二维数点,想了想似乎排序加线段树难写,就写了个树套树,结果写完看见空间才\(128M\)..各种奇技淫巧卡空间还是\(MLE\)到天上.后来只好乖乖的写排序+线段树.做法就是把式子写出来,然后把绝对值分类讨论成四种情况,发现这就是二维数点,然后讨论每种情况排序算最小值. 代码1(树套树 30pts) #include<iostream> #include<cstdio> #include<cstring> #include<cm…
\(\color{#0066ff}{ 题目描述 }\) Farmer John最讨厌的农活是运输牛粪.为了精简这个过程,他产生了一个新奇的想法:与其使用拖拉机拖着装满牛粪的大车从一个地点到另一个地点,为什么不用一个巨大的便便弹弓把牛粪直接发射过去呢?(事实上,好像哪里不太对--) Farmer John的农场沿着一条长直道路而建,所以他农场上的每个地点都可以简单地用该地点在道路上的位置来表示(相当于数轴上的一个点).FJ建造了\(N\)个弹弓(\(1 \leq N \leq 10^5\)),其中…
题目传送门 传送点I 传送点II 题目大意 (此题目不需要大意,我认为它已经很简洁了) 显然线段树合并(我也不知道哪来这么多显然) 考虑将每条路径拆成两条路径 s -> lca 和 t -> lca . 对于前一种路径上的某一点i,希望在时刻 w[i] 经过它,那么就有 dep[s] - dep[i] = w[i] 移项可得: dep[s] = w[i] + dep[i] 然后发现dep[s]可以被看做已知条件,那么根据常用套路,在点s将线段树dep[s]处的值 + 1,在lca处还原. 回溯…
题面 传送门:https://www.luogu.org/problemnew/show/P4215 Solution 这题十分有意思. 首先,我们可以先想想离线做法,因为在线做法可以从离线做法推出.(虽然这题推不出) 我们可以明确一点,一个熊孩子开心的时间是满足二分的要求的(如果他某个时刻开心了,那之后的时刻都会保持开心). 对于判断一个区间是否为全0,我们可以用主席树以一个log的代价来判断. 得到每个熊孩子开心的时刻之后,我们就可以直接前缀和解决问题了. 时间复杂度O(m*log^2) …
题面 大意:给出n个弹弓,可以用ti的时间把xi位置运到yi,在给出m组询问,求xj到yj最小时间. sol:首先如果不用弹弓,时间应为abs(xj-yj).否则时间就是abs(xi-xj)+abs(yi-yj)+ti.这就需要拆开绝对值用线段树来维护了.大力枚举四种情况,建四次线段树,就可以过了. #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> us…
题目大意: 小A在平面上(0,0)点的位置,第i栋楼房可以用一条连接(i,0)和(i,Hi)的线段表示,其中Hi为第i栋楼房的高度.如果这栋楼房上任何一个高度大于0的点与(0,0)的连线没有与之前的线段相交,那么这栋楼房就被认为是可见的. 施工队的建造总共进行了M天.初始时,所有楼房都还没有开始建造,它们的高度均为0.在第i天,建筑队将会将横坐标为Xi的房屋的高度变为Yi(高度可以比原来大—修建,也可以比原来小—拆除,甚至可以保持不变—建筑队这天什么事也没做).请你帮小A数数每天在建筑队完工之后…
这篇博客毫无意义-- 只是表达一下我仍然会写树状数组和线段树-- 题目链接 #include <cstdio> #include <cstring> #include <algorithm> #define INF 0x3f3f3f3f #define space putchar(' ') #define enter putchar('\n') using namespace std; typedef long long ll; template <class T…
题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些事件发生在一个二维平面上.小A在平面上(0,0)点的位置,第i栋楼房可以用一条连接(i,0)和(i,Hi)的线段 表示,其中Hi为第i栋楼房的高度.如果这栋楼房上任何一个高度大于0的点与(0,0)的连线没有与之前的线段相交,那么这栋楼房就被认为是可见的. 施工队的建造总共进行了M天.初始时,所有楼房都还没有开始建…
\(\\\) \(Description\) 现在有一个线段树维护长为\(N\)的数列,实现方式是\(mid=((l+r)>>1)\),支持区间加,节点维护区间和. 共有\(M\)次区间加,每次区间加之后询问,选一条从根到任意叶子节点的链,其上的节点维护的区间和之和的期望. \(N,M\le 10^6\) \(\\\) \(Solution\) 根据期望的线性性,开始的想法是维护每一个节点在选中的链上的概率,每次修改把修改乘上概率,复杂度\(\text O(NlogN)\),卡\(T\)三个点…
这题需要一个黑科技--摩尔投票.这是一个什么东西?一个神奇的方法求一个序列中出现次数大于长度一半的数. 简而言之就是同加异减: 比如有一个代表投票结果的序列. \[[1,2,1,1,2,1,1]\] 我们记录一个\(num\)和\(cnt\)先别管它们是干什么的.我们模拟一遍模拟排序. \[首先读第一个数1,num==0,我们把cnt+1=1,num=1\] \[第二个数2,num==1\neq2,我们把cnt-1=0,num不变\] \[然后第三个数1,num==0,我们把cnt+1=1,nu…