【题解】CF264B Good Sequences
【题解】CF264B Good Sequences
具有很明显的无后效性。
考虑\(dp\)。
考虑初始条件,显然是\(dp(0)=0\)
考虑转移,显然是\(dp(t)=max(dp[k])+1\)其中\(gcd(data[t],data[k])>1\)
这样的转移是\(O(n^2)\)的!显然超时。
发现值域\(\le 100000\)那么我们将数拆成它的质因数。
线性筛素数预处理\([1,100000]\)的质数\(O(n)\)的代价。存下来。
然后转移的时候,先直接\(O(\sqrt{n})\)枚举质因数,直接从\(vector\)表里查询能够从谁那里转移。
根据\(dp\)的最优性质,可以知道只需要从\(vector\)的最后一个 \(dp\)值转移过来就好了,一定是最大的。
这样复杂度就是\(O(n\sqrt{n})\)了
#include<bits/stdc++.h>
#define RP(t,a,b) for(register int (t)=(a),edd_=(b);t<=edd_;++t)
#define DRP(t,a,b) for(register int (t)=(a),edd_=(b);t>=edd_;--t)
#define ERP(t,a) for(int t=head[a];t;t=e[t].nx)
#define Min(a,b) ((a)<(b)?(a):(b))
#define pushup(x) seg[(x)]=seg[(x)<<1]+seg[(x)<<1|1]
#define midd register int mid=(l+r)>>1
#define chek if(R<l||r<L)return
#define TMP template<class ccf>
#define rgt L,R,mid,r,pos<<1|1
#define lef L,R,l,mid,pos<<1
#define all 1,n,1
using namespace std;typedef long long ll;
TMP inline ccf qr(ccf k){
char c=getchar();
ccf x=0;
int q=1;
while(c<48||c>57)q=c==45?-1:q,c=getchar();
while(c>=48&&c<=57)x=x*10+c-48,c=getchar();
return q==-1?-x:x;
}
const int maxn=100005;
const int maxl=maxn-5;
bool usd[maxn];
int data[maxn];
#define isp(x) (!usd[x])
vector < int > pr;
#define pb push_back
vector < int > p[100001];
int n;
int ans;
int dp[maxn];
inline void gen_pr(){
usd[1]=1;
usd[0]=1;
RP(t,2,maxl){
if(!usd[t])
pr.pb(t);
RP(i,0,pr.size()-1){
if(t*pr[i]>maxn)
break;
usd[t*pr[i]]=1;
if(!(t%pr[i]))
break;
}
}
}
inline int Max(int x,int y){
if(x>y)
return x;
return y;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("good.in","r",stdin);
freopen("good.out","w",stdout);
#endif
gen_pr();
n=qr(1);
RP(t,1,n)
data[t]=qr(1);
int siz=pr.size()-1;
RP(t,1,n){register int sav=data[t];
RP(i,0,siz){
register int now=pr[i];
register int nowcnt=p[now].size();
if(!(sav%now)){
while(!(sav%now))
sav/=now;
if(nowcnt)
dp[t]=Max(dp[t],dp[p[now][nowcnt-1]]+1);
else
dp[t]=Max(dp[t],1);
p[now].pb(t);
}
if(sav<now)
break;
}
}
ans=1;
RP(t,1,n)
ans=Max(ans,dp[t]);
cout<<ans<<endl;
return 0;
}
【题解】CF264B Good Sequences的更多相关文章
- 洛谷CF264B Good Sequences dp
解题报告:dp+数论 解题报告: 传送门! 开始看这题的时候想挂了,,,想了个显然是错解的想法,,,就是,我也不知道我怎么想的,鬼迷心窍地就想开个数组存每个质因数的倍数的出现次数,然后排下序的max就 ...
- 题解 CF1428F Fruit Sequences
\(\texttt{Bullshit}\) 蒟蒻 \(\texttt{7 min}\) 切 \(\texttt{F}\), 挽回了本一定掉分的局面/cy 分竟然还没有别人 5 题高 (本题解为目前 c ...
- CF264B Good Sequences
传送门 Description: 松鼠丽丝特别喜欢n个她称之为“好整数”的整数:a1,a2,……,an.(会输入) 现在,她对“好序列”很感兴趣.如果一个序列x1,x2,...,xk能够满足一下三个条 ...
- Leetcode:Repeated DNA Sequences详细题解
题目 All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: " ...
- CodeForces 450B Jzzhu and Sequences(矩阵快速幂)题解
思路: 之前那篇完全没想清楚,给删了,下午一上班突然想明白了. 讲一下这道题的大概思路,应该就明白矩阵快速幂是怎么回事了. 我们首先可以推导出 学过矩阵的都应该看得懂,我们把它简写成T*A(n-1)= ...
- 题解 UVA1608 【不无聊的序列 Non-boring sequences】
思路: 算法很显然: 一.在区间\([l,r]\)找到一个只出现一次的元素P(如果不存在,那么序列\(boring\)) 二.递归处理区间\([l,p-1]\)和区间\([p+1,r]\). 其关键在 ...
- Codeforces Round #631 (Div. 1) B. Dreamoon Likes Sequences 题解(思维+求贡献)
题目链接 题目大意 让你构造一个严格单调上升的数组a满足\(1<=a_1<a_2<....a_n<=d\) 而且要使得这个数组的异或前缀和也满足严格单调上升,求有多少个满足条件 ...
- Codeforces Round #670 (Div. 2) D. Three Sequences 题解(差分+思维+构造)
题目链接 题目大意 给你一个长为n的数组a,要你构造一个非严格单调上升的数组b和一个非严格单调下降的数组c,使得\(b_i+c_i=a_i\) 要你使这两个数组b,c中最大的元素最小,还有q次修改(q ...
- CF450B Jzzhu and Sequences 题解
Content 有一个长度为 \(n\) 的数列 \(\{a_1,a_2,\dots,a_n\}\),满足如下的递推公式: \(i=1\) 时,\(a_1=x\). \(i=2\) 时,\(a_2=y ...
随机推荐
- 伪造服务钓鱼工具Ghost Phisher
伪造服务钓鱼工具Ghost Phisher Ghost Phisher是一款支持有线网络和无线网络的安全审计工具.它通过伪造服务的方式,来收集网络中的有用信息.它不仅可以伪造AP,还可以伪造DNS ...
- Apache/Nginx为PHP设置、添加$_SERVER服务器环境变量
在PHP开发中为了区分线上生产环境还是本地开发环境, 如果我们能通过判断$_SERVER['RUNTIME_ENVIROMENT']为 'DEV'还是'PRO'来区分该多好, 可惜的是$_SERVER ...
- 屏蔽国内广告的hosts
源码:https://github.com/easonjim/blackhosts bug提交:https://github.com/easonjim/blackhosts/issues
- smartsvn学习(-)
3. Day-to-day use 3.1 Everyday commands Most of the common commands you will need are in the SmartSV ...
- Using CLEAR_BLOCK To Prevent Save Confirmation Dialogs In Oracle Forms
Clear_Block built-in clears all records from the current data block and if the user had made some ch ...
- LeakCanary——直白的展现Android中的内存泄露
之前碰到的OOM问题,终于很直白的呈现在我的眼前:我尝试了MAT,但是发现不怎么会用.直到今天终于发现了这个新工具: 当我们的App中存在内存泄露时会在通知栏弹出通知: 当点击该通知时,会跳转到具体的 ...
- libev和libuv的区别
libuv 和 libev ,两个名字相当相近的 I/O Library,最近有幸用两个 Library 都写了一些东西,下面就来说一说我本人对两者共同与不同点的主观表述. 高性能网络编程这个话题已经 ...
- Kali Linux信息收集工具全
可能大部分渗透测试者都想成为网络空间的007,而我个人的目标却是成为Q先生! 看过007系列电影的朋友,应该都还记得那个戏份不多但一直都在的Q先生(由于年级太长目前已经退休).他为007发明了众多神奇 ...
- TortoiseGit在github上创建工程
一.前期准备 TortoiseGit官网下载地址:http://code.google.com/p/tortoisegit/ git下载地址:https://git-scm.com/download/ ...
- linux中shell script的追踪与调试
Shell调试篇 sh [-nvx] scripts.sh -n:不要执行script,仅查询语法的问题: -v:在执行script前,先将script的内容输出到屏幕上: -x:将使用到的scrip ...