luogu [TJOI2007]线段】的更多相关文章

题目链接 luogu [TJOI2007]线段 题解 dp[i][0/1]第i行在左/右端点的最短路 瞎转移 代码 #include<bits/stdc++.h> using namespace std; inline int read() { int x= 0 ,f = 1; char c = getchar(); while(c < '0' || c > '9')c = getchar(); while(c <= '9' &&c >= '0')x =…
线段树的模板题 题目链接:https://www.luogu.org/problemnew/show/P3372 update区间修改,query区间求和 #include <iostream> #include <cstdio> #include <algorithm> #define ll long long #define lson left, mid, rt<<1 #define rson mid+1, right, rt<<1|1 us…
线段树内存下mx[k]的值是动态的1-i这个区间的贡献答案 实际上点存的就是区间答案,但用max是为了求最大区间答案(有可能虽然贡献被消除但后来有更大的贡献填补答案空缺) #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) #define dec(i,x,y) for(register int i=x;i>=y;i--) #define LL long long #define In f…
因为每行必须走完才能到下一行,所以我们有两种决策: 1.最后留在线段左端点 2.最后留在线段右端点 这种存在状态转移且多决策的问题用动态规划来进行递推是最好不过的了. 所以我们设\(dp[i][0/1]\)来表示在第\(i\)行最后留在左/右端点的行走路径最小值.然后设\(sum[0/1][0/1]\)来表示相邻行左右端点之间的距离.(0表示左端点,1表示右端点) 然后很容易就知道状态转移的式子: \(dp[i][0]=min(dp[i-1][0]+1+dis[0][0],dp[i-1][1]+…
题目链接:https://www.luogu.org/problemnew/show/P3373 lazy标记两个,先乘后加 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define lson left, mid, rt<<1 #define rson mid+1, right, rt<<1|1 #define ll lo…
裸DP.感觉楼下的好复杂,我来补充一个易懂的题解. f[i][0]表示走完第i行且停在第i行的左端点最少用的步数 f[i][1]同理,停在右端点的最少步数. 那么转移就很简单了,走完当前行且停到左端点,那么一定是从右端点过来的,那么从上一行左端点转移的话就是 f[i][0]=abs(上一行左端点的坐标-本行右端点的坐标+本行线段长度) 从上一行右端点转移同理. 不需要什么判断.边界f[1][0]=r[1]+r[1]-l[1]-1,f[1][1]=r[1]-1,然后直接搞就行了,时间复杂度O(n)…
贪心想法题解的各位dalaodalaodalao都讲得很清楚了,在下就提供一种桶排的做法吧. 因为给出数据范围 0≤ai<bi≤10000000≤ai<bi≤10000000≤ai<bi≤1000000 可以想到使用桶排的方式优化.即从快排的O(nlogn)O(nlogn)O(nlogn)的复杂度降低到了O(n)O(n)O(n)的复杂度. 需要考虑的问题 快排是依照右端点直接排序后遍历所有线段,因此并不需要考虑右端点相同时的放置顺序(因为遍历一遍总会遇到),但桶排则需要考虑右端点相同的线…
最近多刷些dp,觉得这个算不上蓝题   在一个\(n\times n\)的平面上,在每一行中有一条线段,第\(i\)行的线段的左端点是\((i, L_i)\),右端点是\((i, R_i)\),其中\(1\leq L_i \leq R_i \leq n\). 你从\((1, 1)\)点出发,要求沿途走过所有的线段,最终到达\((n, n)\)点,且所走的路程长度要尽量短. 更具体一些说,你在任何时候只能选择向下走一步(行数增加 1).向左走一步(列数减少 1)或是向右走一步(列数增加 1).当然…
题目链接 Solution 传统的线性 \(dp\) . \(f[i][0]\),\(f[i][1]\) 分别表示最后一次在 \(i\) ,然后在 左边或者右边的最小步数. 然后就每次根据上一次左边和右边的状态转移过来. Code #include<bits/stdc++.h> #define N 20001 #define in(x) x=read() using namespace std; int l[N],r[N],n,ans=0x3f3f3f3f; int v[N],f[N][2];…
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define type long long int #define N (100000+2) using namespace std; type n,m; type edge[N<<2]; type sum[N<<2]; void change(type &x,type &…
题目链接 题解 这不就是luogu的线段树2的板子吗.... 没有任何的区别... 上代码吧... #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<set> #include<map> #include<vector>…
https://www.luogu.org/problemnew/show/P4180#sub 严格次小生成树,即不等于最小生成树中的边权之和最小的生成树 首先求出最小生成树,然后枚举所有不在最小生成树里的边,找出最小增量, 如果将一条不在最小生成树里的边加入生成树,那么就会形成环 如图,绿色为最小生成树,如果将红色边加入,就在紫色区域构成了环 那么现在增量就是用红色边的边权 - 紫色区域内最大的绿色边的边权这里红色边的边权一定大于等于紫色区域内最大的绿色边的边权(由最小生 成树的构成可知),如…
因为本蒻实在太蒻了...对于即将到来的NOIP2018ssfd,所以下决心要把自己近期做过的题目(衡量标准为洛谷蓝题难度或以上)整理一下,归归类,简单地写一下思路,就当作自己复习了吧qwq 本随笔持续更新,自2018.9.19开始,计划更新到2018NOIP截止 (但是因为最近写的比赛题比较多..但是没有办法把这些题放上来..所以只能放上主流OJ上面有的题) 如果本蒻今年有幸没有AFO掉,flag先里在这里--之后学省选知识点的时候会重开一贴更新的,到时候希望是更有难度的题目吧. 搜索 [NOI…
搜索 [NOIP2013]华容道 最短路+带剪枝的搜索,是一个思维难度比较大的题目. CF1064D Labyrinth 考虑贪心,用双向队列bfs [NOIP2017]宝藏 剪枝搜索出奇迹 题解:https://www.cnblogs.com/fengxunling/p/9777606.html luogu 有趣的数 [ZJOI2007] 时态同步 [NOIP2002] 矩形覆盖 这题数据太水... 题解:https://www.cnblogs.com/fengxunling/p/984161…
DP! 黄题: 洛谷P2101 命运石之门的选择 假装是DP(分治 + ST表) CF 982C Cut 'em all! 树形贪心 洛谷P1020 导弹拦截 单调队列水题 绿题: 洛谷P1594 护卫队 一维线性DP 洛谷P1137 旅行计划 拓扑序DP(递推) 洛谷P2736 “破锣摇滚”乐队 Raucous Rockers 三维DP 洛谷P3197 [HNOI2008]越狱 假装是递推(组合数学) 洛谷P1122 最大子树和 树形贪心(笑) 洛谷P1063 能量项链 极水的区间DP,断环复…
从前有个东西叫树状数组,它可以轻易实现一些简单的序列操作,比如单点修改,区间求和;区间修改,单点求值等. 但是我们经常需要更高级的操作,比如区间修改区间查询.这时候树状数组就不起作用了,只能选择写一个2000GB的线段树交上去然后被卡常—–或者另一个选择是写ZKW线段树,会好一些. 再但是…谁告诉你树状数组不能区间修改区间求和?告诉你,树状数组不仅能实现,而且代码依旧那么短小精悍. 今天我们就来研究研究,如何实现这个更划算的数据结构.我们已经学会了树状数组的基本操作:单点修改区间查询,或区间修改…
Day 0 水水比赛 Day 1 写写Dp Part1:Dp基础练习 [HNOI2002]公交车路线 秒切,点数这么少,N这么大,目测O(N)+暴力更新 5min写完 P3842 [TJOI2007]线段 这题其实不难,由于每行必须走完所以落脚位置只能在线段开头/末尾,先预处理开头结尾,然后设状态的时候附加一维表示在开头结束/在结尾结束 转移就直接上一行移下来的步数+这行步数QAQ P2513 [HAOI2009]逆序对数列 前缀和优化Dp套路题 前缀和优化Dp转移方程一般都是这样的: \(F[…
目录 DP百题练(一) 线性 DP 简述 Arithmetic Progressions [ZJOI2006]物流运输 LG1095 守望者的逃离 LG1103 书本整理 CH5102 移动服务 LG1006 传纸条 CH5104 I-区域 LG1359 租用游艇 USACO2.3 最长前缀 Longest Prefix LG1435 回文字串 LG1854 花店橱窗布置 LG3842 [TJOI2007]线段 LG5017 摆渡车 LG1434 [SHOI2002]滑雪 LG2051 [AHO…
从\(\mathcal{CSP}\) 爆炸 到现在,已经有\(3\)个月了.这三个月间,我--这个小蒟蒻又接触了许多听不懂的东西 \(\mathcal{No.}1\) 字符串\(\mathcal{hash}\): 定义: 是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值.简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数.…
我的 BSGS 和各位犇犇的差不多,但是不需要求逆元 Luogu [ TJOI2007 ] 可爱的质数 原题展现 题目描述 给定一个质数 \(p\),以及一个整数 \(b\),一个整数 \(n\),现在要求你计算一个最小的非负整数 \(l\),满足 \(b^l \equiv n \pmod p\). 输入格式 仅一行,有 \(3\) 个整数,依次代表 \(p, b, n\). 输出格式 仅一行,如果有 \(l\) 满足该要求,输出最小的 \(l\),否则输出 no solution. 样例 #1…
https://www.luogu.org/problemnew/show/T45887 题目背景 重阳节到了,我们最好的八重樱拥有全村最好的嘤嘤刀…… 题目描述 在绯玉丸力量的影响下,八重村成了一条长度为 nnn 的八重街,并且绯玉丸可以带着八重樱出现在街上的任意地点.而我们的八重樱则会在街上任意穿梭来获取某一地点上的嘤嘤嘤能量,用以升级她的嘤嘤刀. 在每个时刻,都会发生以下 333 个事件: 111 xxx valvalval 表示在 xxx 地点出现了携带着 valvalval 点嘤嘤嘤能…
题面 给定一棵 \(n\) 个点的树,点带点权. 有 \(m\) 次操作,每次操作给定 \(x,y\) ,表示修改点 \(x\) 的权值为 \(y\) . 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 题解 如题所示 , 是个模板题 ... 首先考虑静态 \(dp\) , 令 \(dp_{u,0/1}\) 为 \(u\) 不存在 / 存在 于最大权独立集的权值大小 . 然后转移很显然 , 一个点存在于独立集中时 , 儿子全都不能选 . 不存在时 , 儿子可选可不选 . 令 \(v\)…
Luogu 2590 [ZJOI2008]树的统计 / HYSBZ 1036 [ZJOI2008]树的统计Count (树链剖分,LCA,线段树) Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路…
题目传送门 传送点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处还原. 回溯…
Luogu 3373 又乘又加的线段树 当给一个节点加上一个加法标记时,直接把加法标记 += 新值: 当给一个节点加上一个乘法标记时,把乘法标记和加法标记同时 *= 新值.(注意pushdown函数中也要这样!) #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; #define INF 0x3f3f3f3f #defin…
luogu P2574 XOR的艺术 (线段树) 算是比较简单的线段树. 当区间修改时.\(1 xor 1 = 0,0 xor 1 = 1\)所以就是区间元素个数减去以前的\(1\)的个数就是现在\(1\)的个数. #include <iostream> #include <cstdio> #define lson now << 1 #define rson now << 1 | 1 const int maxN = 2e5 + 7; struct Node…
手动博客搬家: 本文发表于20170821 14:32:05, 原地址https://blog.csdn.net/suncongbo/article/details/77449455 URL: (Luogu) https://www.luogu.org/problem/show?pid=1198, (BZOJ)http://www.lydsy.com/JudgeOnline/problem.php?id=1012 题目大意: 给定一个数列,开始为空.维护两种操作: (1) Q L表示查询当前数列…
Luogu P3834 可持久化数据结构就是支持在历史版本上进行查询和修改操作的数据结构. 主席树就是对线段树的改进,使之可持久化. 前置知识:动态开点线段树 我们利用权值(值域)线段树统计区间内的数出现的次数. (权值线段树类似于线段树+桶) 那么我们可以对每一个位置建立一棵线段树,维护\(1\)~\(i\)的数据在一个区间上出现的次数. 求\(a[l...r]\)第k小,可以令第\(r\)棵线段树在区间\([x,y]\)上出现的次数减去上第\(l-1\)棵的线段树在区间\([x,y]\)上出…
https://www.luogu.org/problemnew/show/P3834 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; ; #define RR freopen("gg.in", "r", stdin) int n, m; int cnt; struct node…
P3373 [模板]线段树 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N.M.P,分别表示该数列数字的个数.操作的总个数和模数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数乘上k 操作2: 格式:2 x…