CodeForces #549 Div.2 ELynyrd Skynyrd 倍增算法
题目
这道题目实际上可以用动态规划来做。
对于每个区间,我们从右边边界,往左边走,如果能走n-1次,那说明以右边边界为起点存在一个题目中说的子链。
利用倍增算法,实际上倍增也是动态规划。f[i][j] 表示以i为结尾,能够往前走 2^j 次所到达的位置。
最后就是寻找以每个点为右边边界,往前走,能走到n-1次的,并且走的距离最近的的那点,那么在这个点的左边都是满足条件的,在这个点的右边都是不满足条件的。
AC代码
#include <iostream>
#include <stdio.h>
#include <math.h>using namespace std;#define N 200000
int n,m,q;
int f[N+5][20];
int pre[N+5];
int p[N+5];
int a[N+5];
int last[N+5];
int res[N+5];int find(int x,int i)
{if(x==0)return i;int j=0;while(1){if((int)pow(2.0,j)>x)break;elsej++;}if(f[i][j-1]!=0) {x -= (int) pow(2.0, j - 1);return find(x, f[i][j - 1]);} elsereturn -1;
}int main()
{scanf("%d%d%d",&n,&m,&q);for(int i=0;i<n;i++){scanf("%d",&p[i]);if(i!=0)pre[p[i]]=p[i-1];}pre[p[0]]=p[n-1];memset(last,0,sizeof(last));memset(f,0,sizeof(f));memset(res,-1,sizeof(res));for(int i=1;i<=m;i++){scanf("%d",&a[i]);last[a[i]]=i;f[i][0] = last[pre[a[i]]];for(int j=1;j<20;j++){f[i][j]=f[f[i][j-1]][j-1];}}for(int i=1;i<=m;i++){int x=find(n-1,i);res[i]=max(res[i-1],x);}int l,r;for(int i=0;i<q;i++){scanf("%d%d",&l,&r);if(l<=res[r])printf("1");elseprintf("0");}printf("\n");return 0;
}
转载于:https://www.cnblogs.com/dacc123/p/10760798.html
CodeForces #549 Div.2 ELynyrd Skynyrd 倍增算法相关推荐
- CodeForces #549 Div.2 D. The Beatles
题目 解题思路 关键是要 ,找出L 的组合,然后遍历L的组合,用最大公约数就可以算出来当前L的值要停多少次 怎么找出L的组合呢?饭店是每隔K 有一个,是重复的,我们只需要算出第一个饭店两侧,起点和停顿 ...
- 倍增算法入门 超详细解答+LCA+RMQ(ST表)+例题剖析
目录 一.倍增算法 二.倍增算法的应用:求LCA(最近公共祖先)附模板题 三.倍增算法的应用:RMQ 问题(ST表)附模板题 一.倍增算法 要了解倍增之前,强烈建议大家先看一下这位大佬对倍增的解释:[ ...
- tarjan算法_【朝夕的ACM笔记】树上问题-最近公共祖先-倍增算法
[朝夕的ACM笔记]目录与索引 最近公共祖先-倍增算法 一.基本概念 最近公共祖先问题:对于给定的一颗有根树,求其两个节点的最近公共祖先. 祖先:节点本身.节点的父亲.节点父亲的父亲--都是该节点的祖 ...
- 倍增算法入门 超详细解答+LCA+RMQ(ST表)+例题剖析
目录 一.倍增算法 二.倍增算法的应用:求LCA(最近公共祖先)附模板题 三.倍增算法的应用:RMQ 问题(ST表)附模板题 一.倍增算法 要了解倍增之前,强烈建议大家先看一下这位大佬对倍增的解释:[ ...
- 长字符串匹配(BWT编码、后缀数组、倍增算法、FM索引)
用 O(m) 时间复杂度找出一个长度为 m 的短字符串在一个长度为 n 的长字符串中的精确匹配(n>>m),限制长短字符串仅由 A.C.G.T 这四种字符组成. 输入:长短字符串 输出:短 ...
- 树上问题(一)倍增算法求最近公共祖先
倍增算法求最近公共祖先 一.概述 在图论和计算机科学中,最近公共祖先 LCA(Least Common Ancestors)是指在一个树或者有向无环图中同时拥有v和w作为后代的最深的节点.在这里,我们 ...
- 【倍增算法】CF379F New Year Tree 题解
In LuoGu 题目大意: 每次在给定节点增加两个点,动态输出当时树的直径,注意强制动态. 思路详解: 对于新加入的两个节点,新树的直径必定在两个点到另一个叶子节点的距离中,否则,新树的直径肯定和原 ...
- 后缀数组的倍增算法(Prefix Doubling)
最近在自学BWT算法(Burrows-Wheeler transform),其中涉及到对字符串循环移位求编码.直观的办法就是模拟,使用O(n3)的时间求出BWT编码.经过简单的简化后也要O(n2log ...
- Codeforces Round #717 (Div. 2) D. Cut 倍增
传送门 文章目录 题意: 思路: 题意: 给定长度为nnn的序列,有qqq个询问,每次询问一个区间,输出至少将这个区间分成多少个连续区间才能使每个区间内的数互质. 思路: 首先要判断互质,这个比较容易 ...
最新文章
- Atutor、 Claroline、 Moddle及Sakai号称为四大开源课程管理系统
- 【算法入门】用Python手写五大经典排序算法,看完这篇终于懂了!
- 指针,c语言关键字,作用域,生命周期,内存数据存储
- 国外网站设计欣赏:30个优秀的国外咖啡网站设计
- 高可用高并发的 9 种技术架构!
- 借助URLOS快速安装织梦cms
- linux nice启动vi程序,Linux nice命令
- [转载] Python快速编程入门课后程序题答案
- jsp 九大内置对象详解以及示例
- 什么是宝塔面板,跟服务器之间有什么特别联系?
- 手披云雾开鸿蒙,有关泰山的古诗比叫熟悉的古诗来回吧~
- Untiy 接入 移动MM 详解 转
- SAP -Posting only Possible in Periods YYYY/MM YYYY/MM in company 1000
- Windows常用快捷键及结束explorer.exe出现蓝屏的办法
- 情感分析-英文电影评论
- 是不是可以赚钱的APP越来越多
- python爬取笔趣阁小说的代码微小调整修改
- 【论文笔记】End-to-End Knowledge-Routed Relational Dialogue System for Automatic Diagnosis
- 卧槽!kill -9 竟然杀不死进程...
- 运维之道 | apachebench ab压力测试工具
热门文章
- 完整的SQL Server邮件服务
- ONNX系列三 --- 使用ONNX使PyTorch AI模型可移植
- python generator_Python 生成器 generator
- 简述python_简述Python语言经验总结
- python引用模块的私有变量_python 使用不同方法导入模块,模块中私有变量的使用区别...
- C#的Navigate的异常处理
- ionic获取手机通讯录
- ora03135连接失去联系 进程id 0_Daemon 进程的创建
- flush mysql_请教一下,mysql什么时候需要flush privileges?
- 新乡学院2019计算机报名,新乡学院2019年招生章程