| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 173018 | juggernaut | Longest beautiful sequence (IZhO17_subsequence) | C++14 | 166 ms | 20656 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
//Just try and the idea will come!
#include<bits/stdc++.h>
#define int long long int
using namespace std;
int n,i,a[100001],k[100001],dp[100001],j,path[100001],mx,ind,m[(1ll<<20)],pos[(1ll<<20)];
vector<int>ans;
main(){
scanf("%lld",&n);
for(i=1;i<=n;i++)scanf("%lld",&a[i]);
for(i=1;i<=n;i++)scanf("%lld",&k[i]),dp[i]=1;
if(n<=5000){
for(i=1;i<=n;i++){
for(j=1;j<i;j++)
if(__builtin_popcount(a[i]&a[j])==k[i]&&dp[j]+1>dp[i]){
dp[i]=dp[j]+1;
path[i]=j;
}
if(dp[i]>mx){
mx=dp[i];
ind=i;
}
}
do{
ans.push_back(ind);
ind=path[ind];
}while(ind!=0);
reverse(ans.begin(),ans.end());
printf("%lld\n",(int)(ans.size()));
for(int res:ans)printf("%lld ",res);
return 0;
}
for(i=1;i<=n;i++){
for(j=0;j<256;j++)
if(__builtin_popcount(a[i]&j)==k[i]&&m[j]+1>dp[i]){
dp[i]=m[j]+1;
path[i]=pos[j];
}
if(dp[i]>m[a[i]]){
m[a[i]]=dp[i];
pos[a[i]]=i;
}
if(dp[i]>mx){
mx=dp[i];
ind=i;
}
}
do{
ans.push_back(ind);
ind=path[ind];
}while(ind!=0);
reverse(ans.begin(),ans.end());
printf("%lld\n",(int)(ans.size()));
for(int res:ans)printf("%lld ",res);
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
