QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#305879#2571. Aidana and PitackisekiAC ✓788ms115552kbC++203.6kb2024-01-16 05:41:392024-01-16 05:41:41

Judging History

你现在查看的是最新测评结果

  • [2024-01-16 05:41:41]
  • 评测
  • 测评结果:AC
  • 用时:788ms
  • 内存:115552kb
  • [2024-01-16 05:41:39]
  • 提交

answer

#include <bits/stdc++.h>


using namespace std;
const int maxn = 1000025;
const int inf = 1e9;

struct Item {
    int d1, d2, d3;
    int mx, my, mz;
    Item (int _d1, int _d2, int _d3, int _mx, int _my, int _mz)
        : d1(_d1), d2(_d2), d3(_d3), mx(_mx), my(_my), mz(_mz) {}
    friend bool operator<(const Item &lhs, const Item &rhs) {
        return lhs.d1 < rhs.d1;
    }
};

template <typename T>
struct Fenwick {
    T def;
    const vector<int> & u;
    vector<T> mn;
    Fenwick(const vector<int> &_u, T _def)
        : u(_u), def(_def), mn(u.size()+1, def) {}
    void add(int p, T t) {
        p = lower_bound(u.begin(), u.end(), p) - u.begin();
        for (++p; p < mn.size(); p += p & -p)
            mn[p] = min(mn[p], t);
    }
    T query(int p) {
        p = lower_bound(u.begin(), u.end(), p) - u.begin();
        T res = def;
        for (++p; p > 0; p -= p & -p)
            res = min(res, mn[p]);
        return res;
    }
};

signed main() {
    cin.tie(nullptr) -> sync_with_stdio(false);
    int n;
    cin >> n;
    vector<int> org_a(n);
    for (int i = 0; i < n; i++)
        cin >> org_a[i];

    int a = n/2, b = n-a;
    vector<int> A(a), B(b);
    for (int i = 0; i < n; i++)
        if (i < a)
            A[i] = org_a[i];
        else
            B[i-a] = org_a[i];
    auto Enum = [](const vector<int> &vec) {
        int n = vec.size();
        vector<int> sum(1 << n);
        for (int i = 0; i < n; i++)
            sum[1 << i] = vec[i];
        for (int i = 0; i < (1<<n); i++)
            sum[i] = sum[i - (i & -i)] + sum[i & -i];
        vector<Item> res;
        const int U = (1<<n)-1;
        for (int s = 0; s < (1<<n); s++) {
            int u = ~s & U;
            for (int f = u; ; f = (f - 1) & u) {
                int x = sum[s];
                int y = sum[u ^ f];
                int z = sum[f];
                res.emplace_back(x - y, y - z, x - z, s, u ^ f, f);
                if (!f)
                    break;
            }
        }
        return res;
    };
    auto ea = Enum(A);
    auto eb = Enum(B);
    sort(ea.begin(), ea.end());
    sort(eb.begin(), eb.end());
    reverse(eb.begin(), eb.end());
    vector<int> u;
    for (int i = 0; i < (int)ea.size(); i++) {
        u.push_back(ea[i].d2);
    }
    for (int i = 0; i < (int)eb.size(); i++) {
        u.push_back(-eb[i].d2);
    }
    sort(u.begin(), u.end());
    u.erase(unique(u.begin(), u.end()), u.end());
    Fenwick<tuple<int,int,int,int>> BIT(u, make_tuple(inf, inf, inf, inf));
    int ans = 1e9;
    int anx, any, anz;
    for (int i = 0, j = 0; i < (int)ea.size(); i++) {
        while (j < (int)eb.size() && ea[i].d1 + eb[j].d1 >= 0) {
            BIT.add(-eb[j].d2,
                    make_tuple(eb[j].d3, eb[j].mx, eb[j].my, eb[j].mz));
            j++;
        }
        // a + b >= 0
        // -b <= a
        auto [cost, mx, my, mz] = BIT.query(ea[i].d2);
        if (cost == inf)
            continue;
        cost += ea[i].d3;
        mx = (mx << a) | ea[i].mx;
        my = (my << a) | ea[i].my;
        mz = (mz << a) | ea[i].mz;
        if (cost < ans) {
            ans = cost;
            anx = mx;
            any = my;
            anz = mz;
        }
    }
    // cerr << bitset<30>(anx) << endl;
    // cerr << bitset<30>(any) << endl;
    // cerr << bitset<30>(anz) << endl;
    for (int i = 0; i < n; i++) {
        if (anx >> i & 1)
            cout << 1;
        else if (any >> i & 1)
            cout << 2;
        else
            cout << 3;
        cout << (i+1==n ? '\n' : ' ');
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3632kb

input:

5
2 3 1 4 2

output:

3 2 2 1 3

result:

ok answer is 0

Test #2:

score: 0
Accepted
time: 0ms
memory: 3632kb

input:

6
3 2 5 3 4 2

output:

2 3 1 2 3 1

result:

ok answer is 1

Test #3:

score: 0
Accepted
time: 0ms
memory: 3568kb

input:

3
2617460 3290620 1468912

output:

2 1 3

result:

ok answer is 1821708

Test #4:

score: 0
Accepted
time: 231ms
memory: 81956kb

input:

25
6 6 7 8 5 10 5 7 10 10 4 4 5 8 1 6 3 1 9 4 10 7 8 4 5

output:

2 2 3 2 2 3 2 2 2 3 2 3 1 1 1 1 3 1 1 1 1 1 3 3 3

result:

ok answer is 0

Test #5:

score: 0
Accepted
time: 210ms
memory: 80868kb

input:

25
8 2 2 9 9 10 3 5 9 1 2 5 8 1 4 8 4 3 6 2 8 8 4 2 2

output:

2 3 3 2 2 3 3 2 2 3 2 3 1 1 1 1 1 1 1 3 1 3 3 3 3

result:

ok answer is 1

Test #6:

score: 0
Accepted
time: 271ms
memory: 81240kb

input:

25
9999996 9999999 9999991 9999991 9999999 9999997 9999991 9999993 9999992 10000000 9999991 10000000 9999996 9999997 9999993 9999992 9999990 9999991 9999997 10000000 9999998 9999990 9999993 9999990 9999999

output:

2 2 1 1 2 3 1 2 2 2 1 2 2 3 3 1 1 1 3 3 3 1 3 1 3

result:

ok answer is 9999943

Test #7:

score: 0
Accepted
time: 139ms
memory: 80936kb

input:

25
10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000

output:

3 2 2 3 2 2 2 3 3 2 2 2 1 1 1 1 1 1 1 1 1 3 3 3 3

result:

ok answer is 10000000

Test #8:

score: 0
Accepted
time: 787ms
memory: 115028kb

input:

25
4568194 6252832 2990361 6179671 5525735 3402540 12193 4812907 2393092 9823299 4089880 1724585 2200631 5143163 5750864 5341161 5957736 2310544 8033121 9675751 9295231 71902 6463783 7667395 5613033

output:

1 3 3 3 3 3 2 2 2 1 1 3 3 2 3 1 1 1 2 1 2 3 2 3 2

result:

ok answer is 49

Test #9:

score: 0
Accepted
time: 779ms
memory: 111200kb

input:

25
7762025 9149481 7523209 4813111 6800820 1960599 4807700 5411348 4528299 7599785 3468951 537831 6539799 2655771 1259341 9722159 506693 2973008 7910966 3611985 6228870 4141646 9112851 1735188 6538160

output:

3 1 2 3 1 3 3 2 3 3 2 2 3 3 3 1 3 1 1 2 2 1 2 1 2

result:

ok answer is 145

Test #10:

score: 0
Accepted
time: 759ms
memory: 113884kb

input:

25
4732744 6239034 6860504 9029957 848680 209411 3629865 1309532 7860007 2831327 1707125 320774 4082248 4458046 8318819 7279399 861428 5020696 716989 8764261 952311 9612131 5994738 7283372 5509248

output:

3 3 3 1 3 3 3 2 2 3 2 2 2 1 1 2 1 2 1 1 2 2 1 3 3

result:

ok answer is 53

Test #11:

score: 0
Accepted
time: 782ms
memory: 113632kb

input:

25
3926971 5832018 518527 8763702 973269 4552634 6533999 2808656 1277522 5063756 3389181 9876771 4222160 9001717 3592108 5852492 7874646 507942 8922016 4798000 1131210 9081684 512549 3399413 3253241

output:

3 2 2 1 3 2 3 2 2 1 2 1 2 3 3 2 3 2 1 1 1 2 2 3 3

result:

ok answer is 91

Test #12:

score: 0
Accepted
time: 775ms
memory: 113144kb

input:

25
9383440 7906533 1692080 1331860 34750 3968473 2920448 8420499 271149 5986045 9894611 508079 1328124 2344042 9426700 8381332 7038317 4146561 5946221 3554163 215270 6084580 2549278 2162818 3791345

output:

1 2 1 3 3 3 3 1 3 2 1 2 3 3 3 2 1 2 2 2 3 3 3 3 3

result:

ok answer is 110

Test #13:

score: 0
Accepted
time: 788ms
memory: 115092kb

input:

25
4046088 7315708 7288467 1966990 9827334 4635838 8767858 753173 7611802 8291513 4297560 3224050 8917952 5408746 3999749 761012 1332251 409871 2394270 1464938 7524338 2072107 3597866 4231339 9638829

output:

2 3 2 2 1 1 2 1 1 3 3 2 3 1 2 1 1 2 2 3 1 1 2 2 3

result:

ok answer is 101

Test #14:

score: 0
Accepted
time: 758ms
memory: 112996kb

input:

25
5547618 2099625 1573205 2912509 2335015 318412 5812834 9389294 7275632 2026666 7297673 3627332 1756646 7605338 5450938 6407663 678114 5237576 4788058 1293302 5458419 9269556 9795138 6180722 2919003

output:

3 2 3 3 2 2 3 1 2 3 1 3 3 3 1 1 1 3 2 2 2 2 1 2 3

result:

ok answer is 93

Test #15:

score: 0
Accepted
time: 770ms
memory: 112528kb

input:

25
58653 5582060 2162966 9667782 5952067 1573434 692941 6120542 1083586 5478323 762427 4922098 3516225 9558027 2481388 1525866 1640140 5470075 6840333 8007024 520149 1766849 496240 7801716 7498415

output:

2 1 2 2 3 1 3 1 3 3 3 3 2 2 1 2 1 2 3 1 1 2 3 1 3

result:

ok answer is 23

Test #16:

score: 0
Accepted
time: 333ms
memory: 79904kb

input:

25
911 78 35 7 73 7 74 57 40 54 71 15 78 931 29 51 12 953 47 18 44 51 27 62 16

output:

2 2 2 3 2 2 2 3 3 2 3 2 1 3 1 1 3 1 1 1 1 3 1 3 3

result:

ok answer is 0

Test #17:

score: 0
Accepted
time: 650ms
memory: 102460kb

input:

25
56582 31593 65868 9990302 89743 29492 69983 10894 37205 19856 32444 9930060 97648 56666 17128 53655 30899 48933 58260 51304 83008 96129 1061 11962 9941936

output:

1 2 3 2 2 2 1 3 2 3 3 3 3 1 1 1 2 1 1 3 2 3 1 2 1

result:

ok answer is 1

Test #18:

score: 0
Accepted
time: 327ms
memory: 79988kb

input:

25
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 6257913

output:

3 3 2 2 2 2 2 3 3 2 2 2 2 2 3 2 2 2 2 2 3 2 2 1 3

result:

ok answer is 1065348

Test #19:

score: 0
Accepted
time: 492ms
memory: 115552kb

input:

25
1 3 9 27 81 243 729 2187 6561 19683 59049 177147 531441 1594323 4782969 1088916 1520954 9015711 5552512 1853562 2760187 8617948 6012543 456601 6151460

output:

3 3 3 3 3 3 2 3 2 2 3 1 2 3 1 2 3 1 3 3 1 2 2 2 3

result:

ok answer is 1603

Test #20:

score: 0
Accepted
time: 354ms
memory: 80716kb

input:

25
1 10 100 1000 10000 100000 1000000 10000000 69 45 74 74 33 29 35 55 1 43 50 86 10 81 29 96 73

output:

3 3 3 3 3 3 2 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3

result:

ok answer is 9888006

Test #21:

score: 0
Accepted
time: 169ms
memory: 78832kb

input:

25
1 15 225 3375 50625 759375 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

output:

3 3 3 3 2 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3

result:

ok answer is 755740

Test #22:

score: 0
Accepted
time: 195ms
memory: 83328kb

input:

25
1 20 400 8000 160000 3200000 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 2

output:

3 3 3 3 2 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3

result:

ok answer is 3191551

Test #23:

score: 0
Accepted
time: 735ms
memory: 113108kb

input:

25
63353 736041 846599 1431744 1739144 2274384 2726277 3192576 3288972 3897012 4065841 4471346 4818261 5270407 5717802 6224939 6449270 6970979 7252374 7847142 8218821 8775107 8869918 9324673 9686751

output:

2 3 1 1 1 3 3 2 1 2 2 3 1 2 3 1 3 1 2 1 1 2 2 3 3

result:

ok answer is 57