codeforces 493 div1 e

题解:

和这件zhcs的那题有点像

第一种做法是考虑i,i+1之间的贡献

这样就是矩形加然后求矩形和

方法1:树套树

方法2:同下面讲的历史版本线段树

另一种做法是我们从左向右维护mx-nx-r+l

跟之前那题一样我们知道这个的最小值为0

另外我们只需要从右向左维护一个单调队列,这样区间取min/max

就可以变成分段区间+/-操作了

然后这样就变成区间+/-然后查询历史为0的个数

这是jry的论文套路

我们对每个节点再维护一个之前考虑的时间

原文地址:https://www.cnblogs.com/yinwuxiao/p/10089035.html

时间: 2024-08-07 07:12:25

codeforces 493 div1 e的相关文章

codeforces #305 div1 done

总算搞定了这一场比赛的题目,感觉收获蛮大 其中A,B,C都能通过自己的思考解决掉 D题思路好神,E题仔细想想也能想出来 以后坚持每两天或者一天做一场CF的div1的全套题目 除非有实在无法做出来的题目,每道题目还是都要写题解的 (我这算不算立flag? 本蒟蒻写的题解的链接: A:http://www.cnblogs.com/joyouth/p/5352953.html B:http://www.cnblogs.com/joyouth/p/5352932.html C:http://www.cn

codeforces #334 div1 603C Lieges of Legendre(博弈)

题目链接: codeforces 603C 题目大意: 有两个人做游戏,游戏规则如下: 有n堆石子,每次可以对一堆石子进行操作,如果当前石子是偶数,那么可以选择将这2*x个石子分成k堆石子数为x的石子堆,还有一种没有前提的操作是取走当前堆的一个石子,问先手赢还是后手赢,先手和后手都足够聪明的情况下. 题目分析: 首先对于这种组合游戏的题目,很容易想到利用SG函数来解.我们对于游戏的局势进行分类讨论: 当k是偶数的情况下, 我们可以知道如果要把一个偶数堆分成k个堆,相当于将局势转到一个新的组合游戏

Codeforces #594 div1 C/div2 E – Queue in the Train

题目链接:https://codeforces.com/contest/1239/problem/C 题意:火车上有n位乘客,按照1到n编号,编号为i的人会在ti分钟想去打水.水箱只能供一位乘客使用,每位乘客会使用p分钟.当一位乘客想要去打水时,他会先看编号在他前面的乘客是不是都在座位上,如果有人没在座位上,他会坐下继续等待,否则他会去排队打水.当某一时刻有几位乘客同时想要打水时,编号最小的乘客会前去打水,其他人会坐下继续等待,计算每位乘客打完水的时间. 做法:模拟.按照题意模拟即可,具体实现见

codeforces#426(div1) B - The Bakery (线段树 + dp)

题意:把 n 个数划分成 m 段,要求每组数不相等的数的数量最大之和. 思路: dp方程 : dp[i][j] = max( dp[k][j-1] + v(k, i) );( j<=k<i , k = j, j+1, +...+ i-1) dp[i][j]表示第 i 个数分到第 j 段的最大值. v(k, i) 表示k~i中不同数的个数,此处用hash记录每个数上一次出现的位置,从上一次出现的位置到当前位置的 dp[i][j-1] 值均可+1. 此时时间复杂度 O(n*m*log(n)). 线

codeforces #313 div1 D

好神的题目! 首先我们运用pick定理A=S-B/2+1将要求的东西转化掉 之后分离变量,我们变成了求选取凸包面积的期望和求选取凸包在边界上的点的期望 我们先考虑求选取凸包面积的期望 如何计算凸多边形的面积,我们可以原点为划分点,计算凸包上的每个向量的叉积的和 如何计算凸包边界上的点,我们可以计算凸包上的每个向量上的点 那么我们可以考虑每个向量被计算的概率 显然p(i)-p(i+k)这个向量被计算的概率为(2^(n-k-1)-1)/(2^n-1-n-n*(n-1)/2)次 这样我们就可以O(n^

codeforces #310 div1 E

算得上是比较水的E题了吧,自己想了想写了写居然1A了 对于这道题,我们很容易想到对于原图的一个边双,定向后任意两点间一定可达 那么我们可以求出原图的边双并将每个边双缩成一个点 那么原图就变成了无环的无向图,也就是一片森林 之后我们考虑每个任务: 1.如果S和T处于一个边双里,显然是可行的 2.如果S和T处于两棵树中,显然不连通不可行 3.S和T处于一棵树中,那么S->lca的所有边都是向上的,lca->T的所有边的都是向下的 对于第三种情况,我们可以在S上打一个up标记,在T上打一个down标

【codeforces #275(div1)】AB题解

A. Diverse Permutation time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Permutation p is an ordered set of integers p1,???p2,???...,???pn, consisting of n distinct positive integers not larg

codeforces #313 div1 C

同BZOJ 3782 上学路线 QAQ 还比那个简单一点 把坐标(1,1)-(n,m)平移成(0,0)-(n-1,m-1) 设dp[i]表示从(1,1)出发第一次经过障碍且到达第i个障碍的方案数 首先到达第i个障碍的方案数为C(x+y,x) 之后我们考虑i是第一个经过的障碍的方案数=到达i的方案数-i不是第一个经过的障碍的方案数 这也是很好算的 容斥一下即可 #include<cstdio> #include<cstring> #include<iostream> #i

codeforces #334 div1 B 603B Moodular Arithmetic(数论)

题目链接: codeforce 603B 题目大意: 给出f(kx mod p)≡kf(x) mod p,求满足条件的f(x)的数量. 题目分析: 首先考虑两种特殊情况,即k=0和k=1的情况. 当k = 0 时, {f(x)=0f(x)={0,?p?1},x=0,x>0 因为k=0?f(kx mod p)≡f(0),x<p 所以只有f(0)必须等于0,其他的f(x)可以为任意值域中的值,所以方案数是pp?1 当k=1时, f(x mod p)=f(x) mod p,x<p?x mod