Codeforces Round #717 (Div. 2) D(倍增dp)
Codeforces Round #717 (Div. 2) D
题意:n个数 q个询问,每一个询问有l和r,问你l到r这段区间中最少能分成几段,每一段中的数都是互质的。
思路:首先预处理出每一个点向左走最多能走多远,可以分解质因数来找,记录质因数最右边的位置,然后使用倍增dp,dp【i】【j】代表j点向左走i^2步 最远能走到哪,然后循问的时候 也是倍增处理就好了。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define re register
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(a) ((a)&-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define rep(i,s,n) for(int i=s;(i)<=(n);i++)
#define rep1(i,s,n) for(int i=s;(i)>=(n);i--)
#define se second
#define scd(a) scanf("%d",&a)
#define scdd(a,b) scanf("%d%d",&a,&b)
#define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define ac cout<<ans<<"\n"
#define F(x) ((x)/3+((x)%3==1?0:tb))
#define G(x) ((x)<tb?(x)*3+1:((x)-tb)*3+2)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pii;
int dx[4]= {-1,0,1,0},dy[4]= {0,-1,0,1};
const ll mod=1e9+7;
const ll N =1e5+10;
const double eps = 1e-4;
//const double pi=acos(-1);
int last[N];
int vis[N];
ll dp[22][N];
int main()
{iosint n,q;cin>>n>>q;rep(i,1,n) {int x;cin>>x;last[i]=last[i-1];for(int j=2;j*j<=x;j++){if(x%j==0){last[i]=max(vis[j],last[i]);while(x%j==0) x/=j;vis[j]=i;}}if(x!=1){last[i]=max(vis[x],last[i]);vis[x]=i;}}for(int i=1;i<=n;i++) dp[0][i]=last[i];for(int i=1;i<=20;i++){for(int j=1;j<=n;j++){dp[i][j]=dp[i-1][dp[i-1][j]];}}while(q--){int l,r;cin>>l>>r;ll ans=0;for(int i=19;i>=0;i--){if(l<=dp[i][r]){ans+=(1ll<<i);r=dp[i][r];}}cout<<ans+1<<endl;}return 0;
}
Codeforces Round #717 (Div. 2) D(倍增dp)相关推荐
- Codeforces Round #717 (Div. 2) D. Cut 倍增
传送门 文章目录 题意: 思路: 题意: 给定长度为nnn的序列,有qqq个询问,每次询问一个区间,输出至少将这个区间分成多少个连续区间才能使每个区间内的数互质. 思路: 首先要判断互质,这个比较容易 ...
- Codeforces Round #717 (Div. 2)
Codeforces Round #717 (Div. 2) CodeForces 1516 题号 题目 知识点 A Tit for Tat 贪心 B AGAGA XOOORRR 思维题 C Baby ...
- Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS
题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...
- Codeforces Round #131 (Div. 2) B. Hometask dp
题目链接: http://codeforces.com/problemset/problem/214/B Hometask time limit per test:2 secondsmemory li ...
- Codeforces Round #374 (Div. 2) C. Journey DP
C. Journey 题目连接: http://codeforces.com/contest/721/problem/C Description Recently Irina arrived to o ...
- Codeforces Round #260 (Div. 1) A - Boredom DP
点击打开链接 题意: 给你n个数,你每次可以选择删除去一个数x,但是等于x+1和等于x-1的数都得删去 你每一次操作可以得x分 思路一: dp[i]表示到i后能够得到的最大分数 dp[i]=max(d ...
- Codeforces Round #387 (Div. 2) 747F(数位DP)
题目大意 给出整数k和t,需要产生一个满足以下要求的第k个十六进制数 即十六进制数每一位上的数出现的次数不超过t 首先我们先这样考虑,如果给你了0~f每个数字可以使用的次数num[i],如何求长度为L ...
- Codeforces Round #717 Div.2
凌晨睡不着 练cf算了 A. Tit for Tat 题意:一行数字,最多k个操作,每次操作可以把不同的两个数一个+1一个-1,并且操作完数字不能为负,问字典序最小的方案. sb题,选头部数字减尾部数 ...
- Codeforces Round #717 (Div. 2)(ABCD)
A. Tit for Tat 从前往后枚举,把前面的数减到0,然后给最后一个数加上去.操作次数没了就停止 #include<bits/stdc++.h> using namespace s ...
最新文章
- 【NLP】经典分类模型朴素贝叶斯解读
- URL(统一资源定位符)
- 如果世界上只有一种数据结构,那么我选择 hash
- vue 给iframe设置src_使用不带src属性的vuejs在iframe中渲染组件
- 63. Event button 事件属性
- maven打包报错:-source 1.5 中不支持 diamond 运算符
- 【历史上的今天】2 月 20 日:Python 问世;Facebook 收购 WhatsApp;DEC 创始人出生
- recyclerview 动态设置高度_RecyclerView 动态调整高度, 调整item高度
- android ip v6 teredo,win7系统通过teredo连接IPv6的操作方法
- 服务器装机选哪个系统好,服务器该装08系统好还是03系统好?
- SKLEARN实例:【泰坦尼克号生存者预测】
- 机器人与视觉,基于坐标系的运动偏移
- 区块链电子合同铸就数字经济信任基石
- java在文件尾部写文件_Java在文件尾部追加内容
- java如何截取视频文件_Java获取视频时长及截取帧截图详解
- 题目1163:素数 2008年北京航空航天大学计算机研究生机试真题
- 实验四:无向图最短路径搜索
- 字节顺序标记(BOM)详解
- 苹果微信更新不了最新版本_爷青结!可以修改微信号了?微信最新版本来了!...
- Android暴露api接口,Android-如何保证API接口数据安全
热门文章
- 如果觉得午休时间太短怎么办?
- 熊吃人该不该杀?这头3米高的大熊吃了7个人,还在洞里藏了很多女人用的东西.........
- 哈哈哈,程序员没有女朋友的原因,我终于找到了!
- 全国胸最小的省是哪个,你知道吗?| 今日最佳
- 离职总结:大公司与小公司的个人体验
- c 中oracle连接字符串,Oracle连接字符串C#
- java语言程序设计一_java语言程序设计(一)-1
- k8s创建pod加入容器_K8S架构原理及其工作流程
- 班尼机器人维修方法_梅州市ABB机器人控制器维修中心
- php header会重定向吗,php – 可以依靠header()重定向来结束程序流吗?