結果

問題 No.2218 Multiple LIS
ユーザー tokitsukazetokitsukaze
提出日時 2023-02-17 21:46:46
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 120 ms / 3,000 ms
コード長 4,707 bytes
コンパイル時間 2,067 ms
コンパイル使用メモリ 191,380 KB
実行使用メモリ 5,320 KB
最終ジャッジ日時 2023-09-26 19:01:47
合計ジャッジ時間 4,776 ms
ジャッジサーバーID
(参考情報)
judge14 / judge15
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,612 KB
testcase_01 AC 2 ms
4,612 KB
testcase_02 AC 3 ms
4,596 KB
testcase_03 AC 2 ms
4,628 KB
testcase_04 AC 2 ms
4,636 KB
testcase_05 AC 3 ms
4,692 KB
testcase_06 AC 2 ms
4,640 KB
testcase_07 AC 2 ms
4,620 KB
testcase_08 AC 3 ms
4,624 KB
testcase_09 AC 2 ms
4,748 KB
testcase_10 AC 2 ms
4,636 KB
testcase_11 AC 3 ms
4,628 KB
testcase_12 AC 2 ms
4,628 KB
testcase_13 AC 2 ms
4,692 KB
testcase_14 AC 3 ms
4,632 KB
testcase_15 AC 3 ms
4,624 KB
testcase_16 AC 2 ms
4,776 KB
testcase_17 AC 3 ms
4,756 KB
testcase_18 AC 2 ms
4,644 KB
testcase_19 AC 2 ms
4,628 KB
testcase_20 AC 2 ms
4,864 KB
testcase_21 AC 7 ms
4,692 KB
testcase_22 AC 33 ms
4,868 KB
testcase_23 AC 55 ms
5,056 KB
testcase_24 AC 13 ms
4,756 KB
testcase_25 AC 61 ms
4,976 KB
testcase_26 AC 85 ms
5,316 KB
testcase_27 AC 86 ms
5,192 KB
testcase_28 AC 86 ms
5,108 KB
testcase_29 AC 86 ms
5,264 KB
testcase_30 AC 85 ms
5,128 KB
testcase_31 AC 25 ms
5,196 KB
testcase_32 AC 25 ms
5,320 KB
testcase_33 AC 25 ms
5,120 KB
testcase_34 AC 24 ms
5,116 KB
testcase_35 AC 25 ms
5,112 KB
testcase_36 AC 3 ms
5,108 KB
testcase_37 AC 120 ms
5,112 KB
testcase_38 AC 2 ms
4,644 KB
testcase_39 AC 3 ms
4,624 KB
testcase_40 AC 98 ms
5,132 KB
testcase_41 AC 98 ms
5,112 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
namespace fastIO{
	#define BUF_SIZE 100000
	#define OUT_SIZE 100000
	//fread->read
	bool IOerror=0;
	//inline char nc(){char ch=getchar();if(ch==-1)IOerror=1;return ch;} 
	inline char nc(){
		static char buf[BUF_SIZE],*p1=buf+BUF_SIZE,*pend=buf+BUF_SIZE;
		if(p1==pend){
			p1=buf;pend=buf+fread(buf,1,BUF_SIZE,stdin);
			if(pend==p1){IOerror=1;return -1;}
		}
		return *p1++;
	}
	inline bool blank(char ch){return ch==' '||ch=='\n'||ch=='\r'||ch=='\t';}
	template<class T> inline bool read(T &x){
		bool sign=0;char ch=nc();x=0;
		for(;blank(ch);ch=nc());
		if(IOerror)return false;
		if(ch=='-')sign=1,ch=nc();
		for(;ch>='0'&&ch<='9';ch=nc())x=x*10+ch-'0';
		if(sign)x=-x;
		return true;
	}
	inline bool read(double &x){
		bool sign=0;char ch=nc();x=0;
		for(;blank(ch);ch=nc());
		if(IOerror)return false;
		if(ch=='-')sign=1,ch=nc();
		for(;ch>='0'&&ch<='9';ch=nc())x=x*10+ch-'0';
		if(ch=='.'){
			double tmp=1; ch=nc();
			for(;ch>='0'&&ch<='9';ch=nc())tmp/=10.0,x+=tmp*(ch-'0');
		}
		if(sign)x=-x;
		return true;
	}
	inline bool read(char *s){
		char ch=nc();
		for(;blank(ch);ch=nc());
		if(IOerror)return false;
		for(;!blank(ch)&&!IOerror;ch=nc())*s++=ch;
		*s=0;
		return true;
	}
	inline bool read_line(char *s){
		char ch=nc();
		for(;blank(ch);ch=nc());
		if(IOerror)return false;
		for(;ch!='\n'&&!IOerror;ch=nc())*s++=ch;
		*s=0;
		return true;
	}
	inline bool read(char &c){
		for(c=nc();blank(c);c=nc());
		if(IOerror){c=-1;return false;}
		return true; 
	}
	template<class T,class... U>bool read(T& h,U&... t){return read(h)&&read(t...);}
	#undef OUT_SIZE
	#undef BUF_SIZE
};
using namespace fastIO;
/************* debug begin *************/
string to_string(string s){return '"'+s+'"';}
string to_string(const char* s){return to_string((string)s);}
string to_string(const bool& b){return(b?"true":"false");}
template<class T>string to_string(T x){ostringstream sout;sout<<x;return sout.str();}
template<class A,class B>string to_string(pair<A,B> p){return "("+to_string(p.first)+", "+to_string(p.second)+")";}
template<class A>string to_string(const vector<A> v){
	int f=1;string res="{";for(const auto x:v){if(!f)res+= ", ";f=0;res+=to_string(x);}res+="}";
	return res;
}
void debug_out(){puts("");}
template<class T,class... U>void debug_out(const T& h,const U&... t){cout<<" "<<to_string(h);debug_out(t...);}
#ifdef tokitsukaze 
#define debug(...) cout<<"["<<#__VA_ARGS__<<"]:",debug_out(__VA_ARGS__);
#else
#define debug(...) 233;
#endif
/*************  debug end  *************/
#define mem(a,b) memset((a),(b),sizeof(a))
#define MP make_pair
#define pb push_back
#define fi first
#define se second
#define sz(x) ((int)x.size())
#define all(x) x.begin(),x.end()
#define sqr(x) ((x)*(x))
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<int,ll> PIL;
typedef pair<ll,int> PLI;
typedef vector<int> VI;
typedef vector<ll> VL;
typedef vector<PII> VPII;
typedef vector<PLL> VPLL;
typedef vector<string> VS;
typedef vector<VI> VVI;
typedef vector<VL> VVL;
typedef vector<VS> VVS;
typedef vector<VPII> VVPII;
/************* define end  *************/
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/hash_policy.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
/********* gp_hash_table end  **********/
void read(int *x,int l,int r){for(int i=l;i<=r;i++) read(x[i]);}
void read(ll *x,int l,int r){for(int i=l;i<=r;i++) read(x[i]);}
void read(double *x,int l,int r){for(int i=l;i<=r;i++) read(x[i]);}
void println(VI x){for(int i=0;i<sz(x);i++) printf("%d%c",x[i]," \n"[i==sz(x)-1]);}
void println(VL x){for(int i=0;i<sz(x);i++) printf("%lld%c",x[i]," \n"[i==sz(x)-1]);}
void println(int *x,int l,int r){for(int i=l;i<=r;i++) printf("%d%c",x[i]," \n"[i==r]);}
void println(ll *x,int l,int r){for(int i=l;i<=r;i++) printf("%lld%c",x[i]," \n"[i==r]);}
/*************** IO end  ***************/
void go();
int main(){
	#ifdef tokitsukaze
		freopen("TEST.txt","r",stdin);
	#endif
	go();return 0;
}
const int INF=0x3f3f3f3f;
const ll LLINF=0x3f3f3f3f3f3f3f3fLL;
const double PI=acos(-1.0);
const double eps=1e-6;
const int MAX=3e5+10;
const ll mod=1e9+7;
/*********************************  head  *********************************/
int a[MAX],dp[MAX],pre[MAX];
void go()
{
	int n,i,j,ans;
	while(read(n))
	{
		read(a,1,n);
		mem(dp,0);
		for(i=1;i<=n;i++)
		{
			dp[a[i]]++;
			for(j=1;j<a[i]&&j*j<=a[i];j++)
			{
				if(a[i]%j) continue;
				dp[a[i]]=max(dp[a[i]],dp[j]+1);
				if(a[i]!=a[i]/j) dp[a[i]]=max(dp[a[i]],dp[a[i]/j]+1);
			}
	//		debug(i,dp[a[i]])
		}
		ans=0;
		for(i=1;i<=100000;i++) ans=max(ans,dp[i]);
		printf("%d\n",ans);
	}
}
0