题解 洛谷 P5465 【[PKUSC2018]星际穿越】
首先考虑题目的性质,发现点向区间连的边为双向边,所以也就可以从一个点向右跳到区间包含该点的点,如图所示:

但事实上向后跳其实是不优的,可以有更好的方法来节省花费:

因此我们发现一个点跳到其前一个区间的花费为 \(1\),且在跳跃过程中不会向右跳,同时我们还证明了一个点向左的花费单调递增。
但是从起点进行第一步跳跃时,有可能会向后跳:

其通过向后跳来到达一个更大的包含该点的区间,然后使下一步跳跃到达一个更向前的位置,第一步采取向后跳方案的花费为 \(2\)。
发现只有第一步是特殊的,所以单独来考虑第一步的情况。
设 \(pos_i=\min\limits_{j=i}^n l_j\),即 \(l_i\) 的后缀最小值,\(pos_i\) 即为位置 \(i\) 第一步采取向后跳方案来到达的最向前的位置。
对每个位置建可持久化线段树,线段树中对应的值为该位置不考虑第一步的花费,位置 \(i\) 的线段树从位置 \(pos_i\) 转移过来,然后在区间 \([1,i-1]\) 通过标记永久化来实现区间加一,表示不是第一步跳的花费。
查询时只需在 \(l_x\) 所对应的线段树上查询区间 \([l,min(r,l_x-1)]\) 的和,其为位置 \(x\) 除去第一步的总花费,然后再加上第一步花费的贡献即可。
\(code:\)
#include<bits/stdc++.h>
#define maxn 300010
#define maxm 10000010
#define mid ((l+r)>>1)
using namespace std;
typedef long long ll;
template<typename T> inline void read(T &x)
{
    x=0;char c=getchar();bool flag=false;
    while(!isdigit(c)){if(c=='-')flag=true;c=getchar();}
    while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    if(flag)x=-x;
}
int n,q,tot;
int a[maxn],pos[maxn],rt[maxn],ls[maxm],rs[maxm];
ll sum[maxm],add[maxm];
ll gcd(ll a,ll b)
{
    return b?gcd(b,a%b):a;
}
void modify(int L,int R,int l,int r,int &cur)
{
    int x=++tot;
    ls[x]=ls[cur],rs[x]=rs[cur],add[x]=add[cur];
    sum[x]=sum[cur]+(min(R,r)-max(L,l)+1),cur=x;
    if(L<=l&&R>=r)
    {
        add[cur]++;
        return;
    }
    if(L<=mid) modify(L,R,l,mid,ls[cur]);
    if(R>mid) modify(L,R,mid+1,r,rs[cur]);
}
ll query(int L,int R,int l,int r,int cur)
{
    if(L>R) return 0;
    if(L<=l&&R>=r) return sum[cur];
    ll v=add[cur]*(min(R,r)-max(L,l)+1);
    if(L<=mid) v+=query(L,R,l,mid,ls[cur]);
    if(R>mid) v+=query(L,R,mid+1,r,rs[cur]);
    return v;
}
int main()
{
    read(n);
    for(int i=2;i<=n;++i) read(a[i]),pos[i]=a[i];
    for(int i=n-1;i>=2;--i) pos[i]=min(pos[i],pos[i+1]);
    for(int i=2;i<=n;++i) rt[i]=rt[pos[i]],modify(1,i-1,1,n,rt[i]);
    read(q);
    while(q--)
    {
        int l,r,x;
        ll g,v;
        read(l),read(r),read(x),v=r-l+1;
        v+=query(l,min(r,a[x]-1),1,n,rt[a[x]]);
        g=gcd(v,r-l+1),printf("%lld/%lld\n",v/g,(r-l+1)/g);
    }
    return 0;
}
题解 洛谷 P5465 【[PKUSC2018]星际穿越】的更多相关文章
- [PKUSC2018]星际穿越
		[PKUSC2018]星际穿越 题目大意: 有一排编号为\(1\sim n\)的\(n(n\le3\times10^5)\)个点,第\(i(i\ge 2)\)个点与\([l_i,i-1]\)之间所有点 ... 
- 最小生成树+LCA【洛谷 P2245】 星际导航
		[洛谷 P2245] 星际导航 题目描述 sideman做好了回到Gliese 星球的硬件准备,但是sideman的导航系统还没有完全设计好.为了方便起见,我们可以认为宇宙是一张有N 个顶点和M 条边 ... 
- [Luogu 5465] [LOJ 6435] [PKUSC2018]星际穿越(倍增)
		[Luogu 5465] [LOJ 6435] [PKUSC2018]星际穿越(倍增) 题面 n个点的图,点i和[l[i],i)的所有点连双向边.每次询问(l,r,x)表示x到[l,r]的所有点的最短 ... 
- 洛谷P3324 [SDOI2015]星际战争
		题目:洛谷P3324 [SDOI2015]星际战争 思路: 类似<导弹防御塔>,因为题目保证有解,花费时间小于最终答案时一定无法消灭所有敌人,只要花费时间大于等于最终答案都可以消灭所有敌人 ... 
- 洛谷  P2317 [HNOI2005]星际贸易 解题报告
		P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ... 
- 题解 洛谷P5018【对称二叉树】(noip2018T4)
		\(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ... 
- 题解 洛谷 P3396 【哈希冲突】(根号分治)
		根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ... 
- 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)
		题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ... 
- 题解-洛谷P4229 某位歌姬的故事
		题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ... 
随机推荐
- vue指令,实例成员,父子组件传参
			v-once指令 """ v-once:单独使用,限制的标签内容一旦赋值,便不可被动更改(如果是输入框,可以主动修改) """ <di ... 
- java集合--模拟斗地主发牌洗牌
			import java.util.*; /** * @Date: 2020/6/17 19:53 */public class Test04 { public static void main(Str ... 
- Django实现图片上传并前端页面显示
			Django实现图片上传和图片显示 开始之前我们先确认环境中已经安装了Pillow,如果没有安装,可以通过pip install Pillow来安装,这个是python的图像处理库 数据库设置 我们创 ... 
- Ajax实现文件上传(Spring MVC)
			## 前端表单 和 JQuery jsp/html代码 使用JQuery <script src="static/js/jquery-3.4.1.js"></sc ... 
- 入门大数据---HiveCLI和Beeline命令行的基本使用
			一.Hive CLI 1.1 Help 使用 hive -H 或者 hive --help 命令可以查看所有命令的帮助,显示如下: usage: hive -d,--define <key=va ... 
- 恕我直言你可能真的不会java第7篇:像使用SQL一样排序集合
			在开始之前,我先卖个关子提一个问题:我们现在有一个Employee员工类. @Data @AllArgsConstructor public class Employee { private Inte ... 
- html+css快速入门教程(4)
			练习 1.网易考拉下拉菜单 2.爱奇艺新闻 3.ps滤镜菜单 4.爱奇艺列表 7 布局 7.1 盒子模型 网页设计,首先要做好整体的布局,网页布局就是将不同的元素按照一定的规则放置在浏览器的不同位置, ... 
- django项目常见报错集
			1.mysqlclient 目前不支持高版本python3 django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or new ... 
- 初探RabbitMQ消息队列
			SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ... 
- Python3笔记018 - 4.3 元组
			第4章 序列的应用 python的数据类型分为:空类型.布尔类型.数字类型.字节类型.字符串类型.元组类型.列表类型.字典类型.集合类型 在python中序列是一块用于存放多个值的连续内存空间. py ... 
