Help needed in 2222B - Artistic Balance Tree | Why is my solution not working ?

Div. 1 + Div. 2

Problem Link: https://codeforces.com/contest/2222/problem/B

My code:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define ld long double
#define MOD 1000000007

void solve(){
    int n, m; cin >> n >> m;
    vector<int> a(n + 1), x(m);
    for(int i = 1; i <= n; i++) cin >> a[i];
    for(int i = 0; i < m; i++) cin >> x[i];


    int sum = accumulate(a.begin(), a.end(), 0LL);


    if(n == 1){
        bool is_odd_query = false;
        for(int i = 0; i < m; i++){
            if(x[i] % 2 == 1) is_odd_query = true;
        }
        if(is_odd_query) cout << 0 << "\n";
        else cout << sum << "\n";
    }


    vector<int> odd_idx, even_idx;


    for(int i = 1; i <= n; i++){
        if(i % 2 == 0) even_idx.push_back(a[i]);
        else odd_idx.push_back(a[i]);
    }


    sort(odd_idx.rbegin(), odd_idx.rend());
    sort(even_idx.rbegin(), even_idx.rend());


    int cnt_odd_queries = 0;
    for(int i = 0; i < m; i++){
        if(x[i] % 2 == 1) cnt_odd_queries++;
    }
    int cnt_even_queries = m - cnt_odd_queries;


    int pos_odd = 0, pos_even = 0;
    for(int i = 0; i < odd_idx.size(); i++){
        if(odd_idx[i] >= 0) pos_odd++;
    }
    for(int i = 0; i < even_idx.size(); i++){
        if(even_idx[i] >= 0) pos_even++;
    }
    int neg_odd = odd_idx.size() - pos_odd;
    int neg_even = even_idx.size() - pos_even;


    if(pos_odd == 0 && !odd_idx.empty()) sum -= odd_idx[0];


    if(cnt_odd_queries >= pos_odd){
        for(int i = 0; i < odd_idx.size(); i++){
            if(odd_idx[i] >= 0) sum -= odd_idx[i];
        }
    }
    else{
        for(int i = 0; i < cnt_odd_queries; i++) sum -= odd_idx[i];
    }


    if(pos_even == 0 && !even_idx.empty()) sum -= even_idx[0];


    if(cnt_even_queries >= pos_even){
        for(int i = 0; i < even_idx.size(); i++){
            if(even_idx[i] >= 0) sum -= even_idx[i];
        }
    }
    else{
        for(int i = 0; i < cnt_even_queries; i++) sum -= even_idx[i];
    }


    cout << sum << "\n";
}


signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int tc;
    cin >> tc;

    while(tc--) 
      solve();

    return 0;
}

It gives Wrong answer on test 2. On viewing the test cases, I see that it fails on this test case:

n = 5, m = 1

a[] = [-1, 2, -1, -2, 0]

x[] = [5]

But, on my local PC, it runs fine and gives correct answer of -2.

Still I'm seeing the message:

wrong answer 9th numbers differ - expected: '-2', found: '0' in the checker log.

Why's that happening? Where is my solution wrong? I can't figure this out. Please help anyone 🙏🙏

Posted Jun 25, 2026, 4:56 PM UTC

15
Loading comments…