QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#449709#8598. AND МасивQwerty1232#0 415ms7984kbC++231.8kb2024-06-21 16:08:182024-06-21 16:08:21

Judging History

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

  • [2024-06-21 16:08:21]
  • 评测
  • 测评结果:0
  • 用时:415ms
  • 内存:7984kb
  • [2024-06-21 16:08:18]
  • 提交

answer

#include <iostream>
#pragma GCC optimize("O3")
#pragma GCC target("avx512f")
#include <bits/stdc++.h>
#include <immintrin.h>

constexpr int B = 20;

alignas(64) int dp[1 << B + 1];

int32_t main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int n, b;
    std::cin >> n >> b;
    b = std::max(b, 8);
    assert(n <= 1e5);
    assert(b <= 20);
    std::vector<int> input(n);
    for (int i = 0; i < n; i++) {
        std::cin >> input[i];
        assert(0 <= input[i] && input[i] < (1 << b));
    }

    int64_t dlt = 0;
    std::vector<int64_t> ans(n);
    for (int i = n - 1; i >= 0; i--) {
        int val = input[i];
        if (val > 0) {
            // #pragma GCC ivdep
            // for (int j = (1 << b) - 1; j >= 0; j--) {
            //     dp[j] = (j & val) ? dp[j] : dp[j + val] + (i + 1);
            // }
            __m256i vec_val = _mm256_set1_epi32(val);
            __m256i vec_i = _mm256_set1_epi32(i + 1);
            __m256i zero = _mm256_setzero_si256();
            for (int j = (1 << b) - 8; j >= 0; j -= 8) {
                __m256i vec1 = _mm256_load_si256((__m256i*)(dp + j));
                __m256i vec2 = _mm256_loadu_si256((__m256i*)(dp + j + val));
                __m256i vec3 = _mm256_blendv_epi8(_mm256_add_epi32(vec2, vec_i), vec1, _mm256_cmpeq_epi32(_mm256_and_si256(vec1, vec_val), zero));
                _mm256_store_si256((__m256i*)(dp + j), vec3);
            }
            for (int j = 0; j < b; j++) {
                ans[i] += dp[1 << j] + dlt;
            }
        } else {
            dlt += i + 1;
            for (int j = 0; j < b; j++) {
                ans[i] += dp[1 << j] + dlt;
            }
        }
    }
    for (int i = 0; i < n; i++) {
        std::cout << ans[i] << " \n"[i == n - 1];
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 415ms
memory: 7984kb

input:

2000 20
251931 620255 725521 330111 783060 690627 489092 1019106 84341 631993 231500 920886 604265 342966 152434 588032 469990 805072 809795 12697 699326 433747 754394 567737 603087 199524 539078 775214 872735 454953 106496 93877 933762 36223 211878 168057 53977 782675 171782 455544 869778 47128 955...

output:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

result:

wrong answer 1st lines differ - expected: '10212 4259 4815 9101 17193 176...6 39925 39961 39974 43987 18000', found: '0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0'

Subtask #2:

score: 0
Time Limit Exceeded

Test #4:

score: 0
Time Limit Exceeded

input:

100000 20
262144 16 65536 8 256 1024 32 262144 16 262144 256 1024 1 64 2 131072 4096 2048 2 32 8192 4 2 262144 32768 1 524288 262144 262144 2048 8 64 1 2 8192 131072 256 64 8192 1 262144 4 32 4 524288 1 32768 16 64 128 8192 16 32 4096 16384 16384 4 131072 32768 16384 131072 2 16 2048 32768 16 4 4096...

output:


result:


Subtask #3:

score: 0
Wrong Answer

Test #6:

score: 0
Wrong Answer
time: 14ms
memory: 4360kb

input:

100000 8
98 78 5 190 79 234 162 79 118 176 115 130 10 9 233 56 97 15 148 13 46 87 92 65 150 62 50 46 159 101 48 86 203 71 29 124 23 228 55 161 240 80 139 74 251 143 167 207 183 52 50 252 17 185 40 145 167 164 227 166 172 60 182 62 173 227 232 243 251 134 109 241 44 33 217 149 51 6 110 201 242 196 23...

output:

152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 152628168 ...

result:

wrong answer 1st lines differ - expected: '152631657 152630131 152630001 ...4 1199980 1199981 699995 500000', found: '152628168 152628168 152628168 ...0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0'

Subtask #4:

score: 0
Skipped

Dependency #3:

0%

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Skipped

Dependency #1:

0%