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]\)。
但是我们还没有考虑向右走的情况。可以发现一条路径最多只会向右走一次。
那么判一下就好惹。这样就可以\(O(n^2)\)啦。

注意到这一过程实际可以倍增:\(f[i][j]\)表示,从\(i\)出发,走\(2^j\)步最左可以到哪。但是还要考虑第一步向右走的情况,所以不妨直接令它表示,\(i\sim n\)这些点走\(2^j\)步最左可以到哪。
记\(Calc(i,p)\)表示,从\(i\)分别走到\(p\sim i\)所有点总共需要走多远。把询问\([l,r]\)拆成\(Calc(i,l)-Calc(i,r+1)\)。
那么再维护一个\(sum[i][j]\)表示,从\(i\)出发,分别走到\(f[i][j]\sim i\)总共需要走多远。那么\(sum[i][j]=sum[i][j-1]+sum[f[i][j-1]][j-1]+(f[i][j]-f[i][j-1])\times2^{j-1}\)。

具体\(Calc\)的时候,关于向右走一步的处理,不妨直接让\(i\)先向左走一步走到\(L[i]\)。这样\(L[i]\)左边的部分都有可能需要\(i\)向右走,但是这正好符合\(f\)的定义,同时我们已经跳了一步也可以看作向右跳了一步。
注意维护一个变量\(tot\)表示之前一共跳过了多少距离。

还有主席树的做法,我不写惹qwq


//3272ms    68628K / 69284kb    8496ms
#include <cstdio>
#include <cctype>
#include <algorithm>
#define BIT 18
#define gc() getchar()
#define MAXIN 500000
//#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=3e5+5;int L[N],f[BIT+1][N];
LL sum[BIT+1][N];
char IN[MAXIN],*SS=IN,*TT=IN;inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-48,c=gc());return now;
}
int Gcd(int a,int b)
{return b?Gcd(b,a%b):a;
}
LL Calc(int l,int p,const int bit)
{if(L[p]<=l) return p-l;LL ans=p-L[p],tot=1; p=L[p];for(int i=bit; ~i; --i)if(f[i][p]>=l) ans+=sum[i][p]+(p-f[i][p])*tot, tot+=1<<i, p=f[i][p];return ans+(p-l)*(tot+1);//(r-l)*tot+r-l
}int main()
{const int n=read(); int bit=23;while(1<<bit>n) --bit;for(int i=2; i<=n; ++i) L[i]=read();f[0][n]=L[n];for(int i=n-1; i; --i) f[0][i]=std::min(f[0][i+1],L[i]), sum[0][i]=i-f[0][i];for(int j=1; j<=bit; ++j){LL t=1ll<<j-1;for(int i=1; i<=n; ++i)f[j][i]=f[j-1][f[j-1][i]], sum[j][i]=sum[j-1][i]+sum[j-1][f[j-1][i]]+(f[j-1][i]-f[j][i])*t;}for(int Q=read(); Q--; ){int l=read(),r=read(),x=read(),b=r-l+1;LL a=Calc(l,x,bit)-Calc(r+1,x,bit); int g=Gcd(b,a%b);printf("%lld/%d\n",a/g,b/g);}return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/10734771.html

LOJ.6435.[PKUSC2018]星际穿越(倍增)相关推荐

  1. [Luogu 5465] [LOJ 6435] [PKUSC2018]星际穿越(倍增)

    [Luogu 5465] [LOJ 6435] [PKUSC2018]星际穿越(倍增) 题面 n个点的图,点i和[l[i],i)的所有点连双向边.每次询问(l,r,x)表示x到[l,r]的所有点的最短 ...

  2. 洛谷p5465 [PKUSC2018]星际穿越

    [洛谷p5465][PKUSC2018]星际穿越 题面 洛谷 题解 众所周知PKUSC的题大多都不可做,今天好不容易看到1个倍增水题(我猜当时应该全场切了). 我们设\(f[i][j]\)表示\(i\ ...

  3. LOJ6435 洛谷5465 「PKUSC2018」星际穿越 倍增

    题目链接: loj6435 洛谷5465 蒟蒻zyd:这不是大水题吗?看我写个O(nlog2n)O(nlog^2n)O(nlog2n)的诡异ST表卡卡常数跑过去 题目:输出区间距离和 蒟蒻zyd:(笑 ...

  4. LOJ6435 PKUSC2018 星际穿越

    这个题吧当时在考场只得了45分 然后70分的性质都分析到了 不知道为啥就是写萎蛋了 哎 当时还是too young too simple 看了一下julao们的博客这个题有两种做法 一个是比较费脑子的 ...

  5. LOJ6435 PKUSC2018星际穿越

    Problem loj Solution 一个显而易见的结论,对于一个xi,要到达1号节点的最优路径只有第一步可能往右走,后面的步必定是往左走. 那么我们可以dp出整个右边可以走到的最左边的位置mn[ ...

  6. 【题解】LuoGu5465: [PKUSC2018]星际穿越

    原题传送门 重要性质:对于某个点xxx,必定是xxx到[y,x)[y,x)[y,x)中所有点的距离为1,xxx到[z,y)[z,y)[z,y)中所有点距离为2-- (满足z<y<xz< ...

  7. 「PKUSC2018」星际穿越 (70分做法)

    5371: [Pkusc2018]星际穿越 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 27  Solved: 11 [Submit][Statu ...

  8. 《星际穿越》初解析——一部空前绝后的史诗科学巨作

    http://movie.douban.com/review/7188759/ 星际穿越通篇没有一句多余的对白,也没有多余的一个镜头,169分钟超大信息量填满整部电影.这里我打算从两个方面去分析这部电 ...

  9. 星际穿越+降临+明日边缘?星际拓荒重新定义星际探索题材游戏

    丨重新定义星际探索题材游戏 当我们说起"星际探索游戏", 我们会想起精英:危险,会想起坎巴拉太空计划,会想起那个灾难开场但终于修好的无人深空,还有那个耗资几亿还没弄完的星际公民-- ...

最新文章

  1. C++实现矩阵加减乘求转置
  2. 字体设置_Endnote教程|字体设置
  3. 1024|程序员节来了!
  4. 具有Java 7中自动资源管理功能的GC
  5. JMM设计原理之双重检查Lock
  6. 学金融会python_学python对金融有用吗
  7. linux ll 按时间排序_Linux基本操作
  8. android pdf重排软件,PDF拆分重排(paper for kindle)
  9. 华为鸿蒙系统是否应该上线,华为鸿蒙系统上线,仅2家国产品牌支持,爆冷?...
  10. Ajax学习笔记-get请求参数-3
  11. 仿网易云音乐移动端html模板,使用jQuery仿制网易云音乐移动端
  12. java计算机毕业设计ssm+vue高校科研管理系统
  13. 小程序开发:社区团购系统应该如何选择?
  14. C# PDF 静默打印
  15. 【你离诺贝尔奖也就20米】记一次诺奖得主讲座聆听感受
  16. 几款常见的可视化HTML编辑器 WYSIWYG
  17. 东北大学计算机专业课程
  18. epub 格式转换成 mobi
  19. Android x86 4.4-r1 PC正式版发布
  20. NestedScrollView/ScrollView嵌套Recyclerview,导致Recyclerview抢占焦点,置顶了, 修改好后,引起Edittext又不能点击问题处理

热门文章

  1. Spark1——介绍
  2. BZOJ 4568 倍增维护线性基
  3. java对象的序列化机制详解
  4. 国行 lg g3 D858 刷 lg g3 D858hk 教程(备忘)
  5. matplotlib 画多条折线图且x轴下标非数值
  6. J2EE项目代码编写规范分享
  7. 软RAID-mdadm折腾小记
  8. C、C++申请指针内存的问题
  9. 为什么配置了vsftpd.conf文件,用户还是可以访问上级目录?
  10. 金三银四跳槽面试季,我整理前端知识做了个网站