#include <bits/stdc++.h>
using namespace std;
int getNewSum(vector<int>a,int n,int block){
unordered_map<int,int>b;
b[block]++;
vector<int>dp(n,0);
dp[0]=a[0]; //first index is not block
if(b[a[1]]==0){
dp[1]=dp[0]+a[1];
}
if(b[a[2]]==0){
dp[2]=max(dp[1]+a[2],dp[0]+a[2]);
}
for(int i=3;i<n;i++){
if(b[a[i]]!=0){
continue;
}
if(b[a[i-1]]==0){
dp[i]=dp[i-1]+a[i];
}
if(b[a[i-2]]==0){
dp[i]=max(dp[i-2]+a[i],dp[i]);
}
if(b[a[i-3]]==0){
dp[i]=max(dp[i-3]+a[i],dp[i]);
}
}
return dp[n-1];
}
int main() {
// your code goes here
vector<int>arr={1,2,3,4,5};
int block=3; //there can be list of blocks
int n=arr.size();
cout<<"The maximum sum after placing blocks is:"<<getNewSum(arr,n,block);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBnZXROZXdTdW0odmVjdG9yPGludD5hLGludCBuLGludCBibG9jayl7Cgl1bm9yZGVyZWRfbWFwPGludCxpbnQ+YjsKCWJbYmxvY2tdKys7Cgl2ZWN0b3I8aW50PmRwKG4sMCk7CglkcFswXT1hWzBdOyAgIC8vZmlyc3QgaW5kZXggaXMgbm90IGJsb2NrCglpZihiW2FbMV1dPT0wKXsKCQlkcFsxXT1kcFswXSthWzFdOwoJfQoJaWYoYlthWzJdXT09MCl7CgkJZHBbMl09bWF4KGRwWzFdK2FbMl0sZHBbMF0rYVsyXSk7Cgl9Cglmb3IoaW50IGk9MztpPG47aSsrKXsKCQlpZihiW2FbaV1dIT0wKXsKCQkJY29udGludWU7CgkJfQoJCWlmKGJbYVtpLTFdXT09MCl7CgkJCWRwW2ldPWRwW2ktMV0rYVtpXTsKCQl9CgkJaWYoYlthW2ktMl1dPT0wKXsKCQkJZHBbaV09bWF4KGRwW2ktMl0rYVtpXSxkcFtpXSk7CgkJfQoJCWlmKGJbYVtpLTNdXT09MCl7CgkJCWRwW2ldPW1heChkcFtpLTNdK2FbaV0sZHBbaV0pOwoJCX0KIAoJfQoJcmV0dXJuIGRwW24tMV07Cn0KIAppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXZlY3RvcjxpbnQ+YXJyPXsxLDIsMyw0LDV9OwoJaW50IGJsb2NrPTM7ICAgICAgICAvL3RoZXJlIGNhbiBiZSBsaXN0IG9mIGJsb2NrcwoJaW50IG49YXJyLnNpemUoKTsKCWNvdXQ8PCJUaGUgbWF4aW11bSBzdW0gYWZ0ZXIgcGxhY2luZyBibG9ja3MgaXM6Ijw8Z2V0TmV3U3VtKGFycixuLGJsb2NrKTsKIAoJcmV0dXJuIDA7Cn0=