제출 #170146

#제출 시각아이디문제언어결과실행 시간메모리
170146nvmdavaLongest beautiful sequence (IZhO17_subsequence)C++17
40 / 100
6080 ms10156 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("Ofast")
#pragma GCC target("fma,avx2")
using namespace std;
#define ll long long
#define ff first
#define ss second
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define N 100005

int a[N], k[N], ans[N], f[N];
int bit[1050000];

vector<int> fans[100005];

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin>>n;
    for(int i = 1; i <= 1048576; ++i){
        bit[i] = bit[-i & i ^ i] + 1;
    }
    for(int i = 1; i <= n; ++i)
        cin>>a[i];
    for(int i = 1; i <= n; ++i){
        cin>>k[i];
        ans[i] = 1;
    }
    int mxid = 1;
    for(int i = 1; i <= n; ++i){
        for(int j = ans[mxid]; j >= 1; --j){
            for(auto& x : fans[j]){
                if(bit[a[x] & a[i]] == k[i]){
                    f[i] = x;
                    ans[i] = j + 1;
                    break;
                }
            }
            if(ans[i] != 1) break;
        }
        if(ans[i] > ans[mxid])
            mxid = i;
        fans[ans[i]].push_back(i);
    }
    cout<<ans[mxid]<<'\n';
    vector<int> v;
    while(mxid){
        v.push_back(mxid);
        mxid = f[mxid];
    }
    while(!v.empty()){
        cout<<v.back()<<' ';
        v.pop_back();
    }
}

컴파일 시 표준 에러 (stderr) 메시지

subsequence.cpp: In function 'int main()':
subsequence.cpp:27:25: warning: suggest parentheses around arithmetic in operand of '^' [-Wparentheses]
         bit[i] = bit[-i & i ^ i] + 1;
                      ~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...