1382D - Unmerge - CodeForces Solution


dp *1800

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 10;

#define pb push_back
#define me memset

int t;
int n;
int a[N];
vector<int> v;
int dp[N];

int main() {
    scanf("%d", &t);
    while (t--) {
        scanf("%d", &n);
        me(dp, 0, sizeof(dp));
        v.clear();
        for (int i = 1; i <= 2 * n; ++i) {
            scanf("%d", &a[i]);
        }
        int mx = a[1];
        int pos = 1;
        for (int i = 2; i <= 2 * n; ++i) {
            if (a[i] > mx) {
                v.pb(i - pos);
                mx = a[i];
                pos = i;
            }
        }

        v.pb(2 * n + 1 - pos);
        dp[0] = 1;
        for (int i = 0; i < (int)v.size(); ++i) {
            for (int j = n; j >= v[i]; --j) {
                dp[j] += dp[j - v[i]];
            }
        }
        if (dp[n]) puts("YES");
        else puts("NO");

    }

    return 0;
}


Comments

Submit
0 Comments
More Questions

1676D - X-Sum
1679A - AvtoBus
1549A - Gregor and Cryptography
918C - The Monster
4B - Before an Exam
545B - Equidistant String
1244C - The Football Season
1696B - NIT Destroys the Universe
1674A - Number Transformation
1244E - Minimizing Difference
1688A - Cirno's Perfect Bitmasks Classroom
219A - k-String
952A - Quirky Quantifiers
451B - Sort the Array
1505H - L BREAK into program
171E - MYSTERIOUS LANGUAGE
630D - Hexagons
1690D - Black and White Stripe
1688D - The Enchanted Forest
1674C - Infinite Replacement
712A - Memory and Crow
1676C - Most Similar Words
1681A - Game with Cards
151C - Win or Freeze
1585A - Life of a Flower
1662A - Organizing SWERC
466C - Number of Ways
1146A - Love "A"
1618D - Array and Operations
1255A - Changing Volume