Submission #914195

#TimeUsernameProblemLanguageResultExecution timeMemory
914195PieArmyKpart (eJOI21_kpart)C++17
100 / 100
865 ms1112 KiB
    #include <bits/stdc++.h>
    using namespace std;
     
    int main(){
        ios_base::sync_with_stdio(false);cin.tie(NULL);
        int t;cin>>t;
        while(t--){
            int n;cin>>n;
            int arr[n];
            int pref[n+1];pref[0]=0;
            for(int i=0;i<n;i++){cin>>arr[i];pref[i+1]=pref[i]+arr[i];}
            vector<int>dp(100001,-1);
            vector<int>nex(n+1,-1);
            for(int i=0;i<n;i++){
                for(int j=pref[i+1];j>=arr[i];j--){
                    dp[j]=max(dp[j],dp[j-arr[i]]);
                }
                dp[arr[i]]=i;
                int las=0,pos=nex[0];
                while(pos!=-1){
                    int sum=pref[i+1]-pref[i+1-pos];
                    if((sum&1)||dp[sum>>1]<=i+1-pos){nex[las]=nex[pos];}
                    else las=pos;
                    pos=nex[pos];
                }
                if((pref[i+1]&1)==0&&dp[pref[i+1]>>1]!=-1)nex[las]=i+1;
            }
            vector<int>ans;
            int pos=nex[0];
            while(pos!=-1){ans.push_back(pos);pos=nex[pos];}
            cout<<ans.size();
            for(int x:ans)cout<<" "<<x;
            cout<<'\n';
        }
        return 0;
    }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...