传送门 题意简述: 给一个序列,对于第iii个位置,它跟[limi,i−1][lim_i,i-1][limi​,i−1]这些位置都存在一条长度为111的无向边. 称dist(u,v)dist(u,v)dist(u,v)表示(u,v)(u,v)(u,v)间最短路长度. qqq次询问,每次给出l,r,xl,r,xl,r,x,求∑i=lrdist(i,x)\sum_{i=l}^rdist(i,x)∑i=lr​dist(i,x) 思路: 有一个显然的结论,从iii走到它之前的点,要么向右边走一次之后一直…
题目描述 有n个星球,它们的编号是1到n,它们坐落在同一个星系内,这个星系可以抽象为一条数轴,每个星球都是数轴上的一个点, 特别地,编号为i的星球的坐标是i. 一开始,由于科技上的原因,这n个星球的居民之间无法进行交流,因此他们也不知道彼此的存在. 现在,这些星球独立发展出了星际穿越与星际交流的工具. 对于第i个星球,他通过发射强力信号,成功地与编号在[Li,i-1]的所有星球取得了联系(编号为1的星球没有发出任何信号), 取得联系的两个星球会建立双向的传送门,对于建立了传送门的两个星球u,v,…
传送门 线段树优化dpdpdp入门题. 要求把nnn个数分成kkk段,每段价值为里面不相同的数的个数,求所有段的价值之和最大值.n≤35000,k≤50n\le35000,k\le50n≤35000,k≤50 先考虑直接暴力dpdpdp,fj,if_{j,i}fj,i​表示把前iii个分成jjj组的最优值. 显然fj,i=max⁡j−1≤k≤i−1{fj−1,k+W(k+1,i)}f_{j,i}=\max\limits_{j-1\le k\le i-1}\{f_{j-1,k}+W(k+1,i)\…
[PKUSC2018]星际穿越 题目大意: 有一排编号为\(1\sim n\)的\(n(n\le3\times10^5)\)个点,第\(i(i\ge 2)\)个点与\([l_i,i-1]\)之间所有点有双向边.\(q(q\le3\times10^5)\)次询问,每次对于\(l_i,r_i,x_i\),求\(\frac{\sum_{y=l_i}^{r_i}dist(x_i,y)}{r_i-l_i+1}\). 思路: 首先可以得到一个基本结论,从\(x_i\)出发到\(y\)的最短路中,一定存在至少…
[Luogu 5465] [LOJ 6435] [PKUSC2018]星际穿越(倍增) 题面 n个点的图,点i和[l[i],i)的所有点连双向边.每次询问(l,r,x)表示x到[l,r]的所有点的最短路径长度和/(r-l+1). \(n \leq 10^5,l_i<r_i<x_i\) 分析 有(du)趣(liu)的倍增问题. 观察到\(l_i<r_i<x_i\),也就是说我们要求往左走的最小距离.首先差分一下,设\(sum(x,i)\)表示\(x\)到\([i,x-1]\)的最短距…
LOJ BZOJ 参考这儿qwq. 首先询问都是求,向左走的最短路. \(f[i][j]\)表示从\(i\)走到\(j\)最少需要多少步.表示这样只会\(O(n^2\log n)\)的= =但是感觉能卡过\(70\)分. 注意到从\(i\)出发,走\(j\)步能到达的点都是一段一段的.所以不妨令\(f[i][j]\)表示,从\(i\)出发,走\(j\)步能到达的最左边的是什么.那么\(f[i][j+1]=\min\limits_{k=f[i][j]}^{i-1}L[k]\). 但是我们还没有考虑…
这个题吧当时在考场只得了45分 然后70分的性质都分析到了 不知道为啥就是写萎蛋了 哎 当时还是too young too simple 看了一下julao们的博客这个题有两种做法 一个是比较费脑子的倍增做法 一个是比较费体力[大雾 的主席树做法 打死也不写数据结构的我当然还是学第一个啦 首先我们可以分析到要么往右跳一步再往左跳 要么一直往左跳 这个过程我们可以O(n^2)做 通过更新mn[x]就是每个点往左跳最远的位置 这样就可以一步一步往左跳 然后这个过程可以优化一下就是从右往左扫一遍更新先…
才知道vector在插入值后是可以直接修改的... 那就很简单了 用vector的lowerbound这样的二分操作,提前储存每个颜色的位置 发现交换相对位置不变 关于vector的lowerbound的讲解(感谢QAQ) #include<iostream> #include<cstdio> #include<string> #include<algorithm> #include<cmath> #include<vector> #…
题意:n个点的图,点i和[l[i],i)的所有点连双向边.每次询问(l,r,x)表示x到[l,r]的所有点的最短路径长度和. 首先这题显然可以线段树优化建图,但是需要比较好的常数才能通过45分,还需要发掘性质. 先不考虑往右走的情况,对于一个点x,每个点i与x的最短距离一定形成一个个连续区间,即:设f[i][j]表示i走j步能到的最左的点,则$f[i][j+1]=\min\limits_{k=f[i][j]}^{i-1}l[k]$.所以只要往前扫一遍就能求出f[i]数组. 接着考虑往右走的情况,…
传送门 题意:给一颗树,每个节点有个初始值,要求支持将i节点的值改为x或询问i节点到j节点的路径上有多少个值为x的节点. 思路: 考虑对每种颜色动态开点,然后用树剖+线段树维护就完了. 代码: #include<bits/stdc++.h> #define ri register int using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); w…