LOJ P10176 最大连续和 题解】的更多相关文章

每日一题 day29 打卡 Analysis 朴素的DP方程为: dp[i]=max{sum[i]-sum[j-1]}; 对于每个i 需要用单调队列维护最小的sum[j-1] 注意: 1.tail初值要置成1,因为i=1时状态要从i=0转移,所以队列中已有一个元素0. 2.对于每个i,要先维护队头,因为j !=i,所以i不会从i转移. #include<iostream> #include<cstdio> #include<cstring> #include<al…
推导过程存在漏洞+exCRT板子没打熟于是期望得分÷实际得分=∞? 题目描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 \(1\sim n​\) 顺序杀掉 \(n​\) 条巨龙,每条巨龙拥有一个初始的生命值 \(a_i​\).同时每条巨龙拥有恢复能力,当其使用恢复能力时,它的生命值就会每次增加 \(p_i​\),直至生命值非负.只有在攻击结束后且当生命值恰好为 \(0​\) 时它才会死去. 游戏开始时玩家拥有 \(m\) 把攻击力已知的剑,每次面对巨龙时,玩家只…
???看不懂的期望DP 题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的.作为一个非洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值.但他已经多年没写过代码,连 Spaly 都敲不对了,因此,希望你能帮帮小 K,让他感受一下当欧洲人是怎样的体验. 本题中我们将考虑游戏的一个简化版模型. 玩家有一套卡牌,…
看样子分块题应该做的还不够. 题目描述 设计一个数据结构. 给定一个正整数数列 \(a_0, a_1, \ldots , a_{n-1}\),你需要支持以下两种操作: MODIFY id x: 将 \(a_{\mathrm{id}}\) 修改为 \(x\). QUERY x: 求最小的整数 \(p(0 \leq p < n)\),使得 \(\gcd(a_0, a_1, ..., a_p) \cdot \operatorname{XOR}(a_0, a_1, ..., a_p) = x\). 其中…
树上游戏..二合一? 题目描述 曾经发明了零件组装机的发明家 SHTSC 又公开了他的新发明:聚变反应炉--一种可以产生大量清洁能量的神秘装置. 众所周知,利用核聚变产生的能量有两个难点:一是控制核聚变反应的反应强度,二是使用较少的能量激发聚变反应.而 SHTSC 已经完美解决了第一个问题.一个聚变反应炉由若干个相连的聚变块组成,为了能够使得聚变反应可控,SHTSC 保证任意两个聚能块都可以通过相互之间的链接到达,并且没有一个聚能块可以不重复经过一个链接回到它自己. 但是第二个问题 SHTSC…
每日一题 day37 打卡 Analysis 经典的带限期和罚款的单位时间任务调度问题 将 val 从大到小排序,优先处理罚款多的,将任务尽量安排在期限之前,并且靠后,如果找不到,则放在最后面 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define int long long #define maxn 500+10 #define rep(i,s,e)…
每日一题 day36 打卡 Analysis 非常水的二分模板,就直接二分答案,用贪心策略check就好了 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define int long long #define maxn 100000+10 #define rep(i,s,e) for(register int i=s;i<=e;++i) using…
这道题相当于倍增求LCA的板子,我们只要构建一棵树,然后距离就是x的深度+y的深度 - LCA(x,y)的深度: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 100005 using namespace std; int n,Q; int x,y; ],first[maxn*],go[maxn*],tot; int Dep[max…
每日一题 day52 打卡 Analysis 这道题直接搜索会TLE到**,但我们发现有很多没有用的状态可以删去,比如 1,1,5; 1,5,1; 5,1,1; 所以很容易想到一个优化:按不下降的顺序枚举划分出来的每个数. 然而还是会TLE... 再来想一个事情:n=7,k=4 已经枚举了 1,2,3 三个数,这是如果再枚举 2~7 的数就就显得非常蠢 所以你枚举的数 x 应该小于等于  n-sum(a[i])/(k-step+1), 综上,对于每个枚举的数 x ∈ {x∈N*| a[step-…
每日一题 day48 打卡 Analysis 二分答案,判断序列的平均值是否大于等于mid 具体怎么实现呢? 将序列减去mid,再用前缀和来维护平均值就好了 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define int long long #define maxn 100000+10 #define INF 2147483647 #define re…
每日一题 day39 打卡 Analysis 1.当正向思考受阻时,逆向思维可能有奇效. 2.问题转化为:找到最小的d,使去掉所有权值>d的边之后,连通支的个数<k; 3.定理:如果去掉所有权值>d的边之后,最小生成树被分割为k个连通支,则图也被分为k个连通支. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmat…
每日一题 day27 打卡 Analysis 对于每条非树边 , 覆盖 x 到 LCA 和 y到 LCA 的边 , 即差分算出每个点和父亲的连边被覆盖了多少次 .被覆盖 0 次的边可以和 m 条非树边搭配 , 被覆盖 1 次的边可以和唯一的非树边搭配 , 2 次以上的不能产生贡献 . 时间复杂度 O(n+m) #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #…
每日一题 day7 打卡 Analysis 树状数组 由于题目中给的数据是按y轴排序,我们只需构建x轴的树状数组,也就是说我们只需统计星星i之前一共有多少个x坐标小于或等于Xi的星星,这个数值也就是星星i的等级 又因为树状数组无法处理下标为0的元素(会死循环),所以要把每个x坐标+1 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 1…
每日一题 day6 打卡 Analysis 状压dp dp[i][j]+=dp[i-1][k]; #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define maxn 5000+10 #define mod 100000000 using namespace std; inline int read() { ;…
每日一题 day6 打卡 Analysis 题目的意思是找在区间[x,y]之间满足能够由k个b的不同次幂相加得到的数的总数.这题的关键是转换进制,之前几道题我们保存的是数的每位数,其实也就是10进制,这题我们要保存的是b进制,所以在ask函数中要把原来的对10求余和除10都要改成对b进行操作,dp[x][pre]数组表示第x位由pre个b的不同次幂相加得到的数的总数.在判断进入递归的if条件语句中,i的上界要同时满足小于上界且小于等于1,因为根据题意,只有类似3^4次方能够算进去,2*3^4并不…
Analysis 区间dp+记录路径 用dfs倒着找倒数第几次合并 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 310 #define INF 2139062143 using namespace std; inline int read() { ; ; char c=getchar(); ; )+(x<<)+c-';…
Analysis 区间dp+压位高精 dp五分钟,高精两小时 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 110 #define INF 2147483647 using namespace std; typedef long long ll; ll dp[maxn][maxn][maxn],a[maxn]; ll s1[maxn…
题面 这道题是KMP的模板. KMP需要注意的细节有很多,所以把这篇文章发上来供参考: #include <bits/stdc++.h> using namespace std; char a[1000010],b[1000010]; int nxt[1000010]; int n,m; void pre() { nxt[1]=0; int j=0; for(int i=1;i<=m;i++){ while(j>0&&b[i+1]!=b[j+1]) j=nxt[j]…
题目描述:https://www.cnblogs.com/problems/p/P1112.html 题目链接:http://codedecision.com/problem/1112 线段树区间操作,每一个线段对应的点包含三个信息: \(l\):表示这个区间最左边的点的数值: \(r\):表示这个区间最右边的点的数值: \(cnt\):表示这个区间有多少个数值段. 合并的时候: 根节点的 \(l\) 值等于左儿子节点的 \(l\) 值: 根节点的 \(r\) 值等于右儿子节点的 \(r\) 值…
洛谷 P2615 神奇的幻方 洛谷 P2678 跳石头 洛谷 P1226 [模板]快速幂||取余运算 洛谷 P2661 信息传递 LOJ P10147 石子合并 LOJ P10148 能量项链 LOJ P10149 凸多边形的划分 LOJ P10150 括号配对 LOJ P10151 分离与合体 洛谷 P1309 瑞士轮 洛谷 P3956 棋盘 洛谷 P2196 挖地雷 LOJ P10163 Amount of Degrees LOJ P10171 牧场的安排 洛谷 P5020 货币系统 洛谷…
Loj 2028 随机序列 连续的乘号会将序列分成若干个块,块与块之间用加减号连接: \[ (a_1*a_2*...a_i)\pm(a_{i+1}*a_{i+2}*...a_j)\pm... \] 除去所有都是乘号的一种,对于任意一个序列,总有与之对应唯一的另一个序列,它们所有的加减号都相反. 把这两个序列的和相加,就只剩下了 \(2*(a_1*a_2*...a_i)\),其中 \(i\) 为第一个加减号之前的位置. 那么平均下来,相当于每个序列的贡献为 \((a_1*a_2*...a_i)\)…
目录 分块9题 出题人hzw的解析 数列分块入门 1 修改:区间加 查询:单点值查询 代码 数列分块入门 2 修改:区间加 查询:区间排名 代码 数列分块入门 6 修改:单点插入 查询:单点值 代码 数列分块入门 7 修改:区间加,区间乘 查询:单点查询 代码 数列分块入门 8 修改:区间赋值 查询:区间计数 代码 [总集] LOJ「分块」数列分块入门1 – 9 分块9题 出题人hzw的解析 (tips.以下代码中IO优化都已省去,想看可以点传送门) 数列分块入门 1 修改:区间加 查询:单点值…
题目:https://loj.ac/problem/6436 看题解才会. 有长为 i 的 border ,就是有长为 n-i 的循环节. 考虑如果 x 位置上是 0 . y 位置上是 1 ,那么长度是 | x-y | 的约数的循环节都不可行,因为在该循环节中, x 和 y 处在 “应该相等” 的地位. 最后一个部分分是暴力枚举 0 和 1 来预处理出一个 h[ i ] 表示长度是 i 的约数的循环节不可行.然后枚举循环节的长度 i ,再枚举 i 的倍数看看有没有 “不可行” 的.这样是 nlo…
传送门:https://loj.ac/problem/6029 [题解] 考虑如果有一些近似连续的段 比如 2 2 2 3 3 3,考虑在除3意义下,变成0 0 0 1 1 1,相当于整体-2 又:区间增加很容易造成这种段,所以我们猜测可以暴力维护 用一棵线段树即可.(好像真的能暴力维护啊 我不知道怎么证明复杂度) # include <stdio.h> # include <string.h> # include <iostream> # include <al…
Maximum Score Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83008#problem/J Description Ron likes to play with integers. Recently he is interested in a game where some integers are given and he is…
开始时间:19:40 完成时间:21:00 传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2555 题目大意:(1):在当前字符串的后面插入一个字符串          (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 题解:最近在写后缀自动机,求一个字符串中出现了几次就相当与其right集合大小,直接上parent树,因为后缀自动机构造特性,可能在parent树改变边,于是用lct维护: 代码: #include<algo…
题目 LOJ #152. 乘法逆元 2 题解 一个奇技淫巧qwq.可以离线求乘法逆元,效率\(O(n+log(mod))\). 考虑处理出\(s_n\)表示\(\prod_{i=1}^na_i\).以及\(sinv_n\)表示\(\prod_{i=1}^na_i\)的逆元. 那么对于每次询问,\(sinv_i*s_{i-1}\)就是答案. \(s_i\)显然可以在输入的时候顺便处理出来,\(sinv_n=(s_n)^{mod-2}\)(如果\(mod\)不是质数就exgcd一下). 对于\(si…
题意:找串的最长回文字串(连续) 题解:manacher版题 一些理解:首位加上任意两个字符是为了判断边界. 本算法主要是为了 1.省去奇偶分类讨论. 2.防止形如aaaaaaa的串使得暴力算法蜕化为n^2; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<queue> #include<algorithm> #include<iostream> #include<vector>…
A. Sereja and Swaps time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output As usual, Sereja has array a, its elements are integers: a[1], a[2], ..., a[n]. Let's introduce notation: A swap operatio…
传送门:https://loj.ac/problem/516 [题解] 那段代码求的是相同的数中间隔最小的值. 离散后用set维护每个值出现次数,每次操作相当于合并两个set,这步可以启发式合并. 加元素的时候直接找前驱和后继即可. 学了新姿势:set中insert有返回的,可以访问.first来调用新插入元素的iterator # include <set> # include <vector> # include <stdio.h> # include <st…