Submission #89944

#TimeUsernameProblemLanguageResultExecution timeMemory
89944VardanyanLongest beautiful sequence (IZhO17_subsequence)C++14
0 / 100
2 ms580 KiB
// #pragma GCC optimize "-O3"
#include<bits/stdc++.h>
using namespace std;
const int N = 1000*1000+5;
struct elem{
    int val,ind,par;
};
elem ANS[(1<<24)];
int a[N];
int k[N];
int CNT(int x){
    int ans = 0;
    for(int i = 0;i<22;i++) if((x>>i)&1) ans++;
    return ans;
}
int main()
{
    int n;
    scanf("%d",&n);
    int mx = 0;
    for(int i = 1;i<=n;i++){
            scanf("%d",&a[i]);
            mx = max(mx,a[i]);
    }
    for(int i = 1;i<=n;i++) scanf("%d",&k[i]);
    int mx_ans = 0;
    int pos = 0;
    for(int i = 1;i<=n;i++){
        if(ANS[a[i]].val == 0){
            ANS[a[i]].val = 1;
            ANS[a[i]].ind = 1;
            if(mx_ans<1){
                mx_ans = 1;
                pos = a[i];
            }
        }
        for(int mask = 0;mask<=mx;mask++){
            int now = mask&a[i];
            if(CNT(now) == k[i]){
                if(ANS[a[i]].val<ANS[mask].val+1){
                    ANS[a[i]].val = ANS[mask].val+1;
                    ANS[a[i]].ind = i;
                    ANS[a[i]].par = mask;
                    if(mx_ans<ANS[a[i]].val){
                        mx_ans = ANS[a[i]].val;
                        pos = a[i];
                    }
                }
            }
        }
    }
    vector<int> ans;
    cout<<mx_ans<<endl;
    while(mx_ans--){
      //  cout<<ANS[pos].ind<<" ";
        ans.push_back(ANS[pos].ind);
        pos = ANS[pos].par;
    }
    reverse(ans.begin(),ans.end());
    for(int i = 0;i<ans.size();i++) cout<<ans[i]<<" ";
    cout<<endl;
    return 0;
}

Compilation message (stderr)

subsequence.cpp: In function 'int main()':
subsequence.cpp:60:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0;i<ans.size();i++) cout<<ans[i]<<" ";
                   ~^~~~~~~~~~~
subsequence.cpp:19:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&n);
     ~~~~~^~~~~~~~~
subsequence.cpp:22:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d",&a[i]);
             ~~~~~^~~~~~~~~~~~
subsequence.cpp:25:34: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(int i = 1;i<=n;i++) scanf("%d",&k[i]);
                             ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...