結果
問題 | No.1349 Subset Product Queries |
ユーザー |
![]() |
提出日時 | 2021-01-13 19:32:19 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,700 bytes |
コンパイル時間 | 4,101 ms |
コンパイル使用メモリ | 109,048 KB |
最終ジャッジ日時 | 2025-01-17 17:31:34 |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | RE * 1 |
other | WA * 18 RE * 12 |
ソースコード
#pragma GCC target("avx2")#pragma GCC optimize("O3")#pragma GCC optimize("unroll-loops")#include <cstdio>#include <vector>#include <bitset>constexpr unsigned B = 10;int main() {unsigned N, Q;std::scanf("%u %u", &N, &Q);std::vector<unsigned> A(N);const unsigned Size = N / B;std::vector<std::vector<std::bitset<5001>>> memo(Size, std::vector<std::bitset<5001>>(Size));for (unsigned i = 0; i < Size; ++i) {memo[i][i].set(0);for (unsigned j = i + 1; j < Size; ++j) {memo[i][j] |= memo[i][j - 1];for (unsigned k = B * (j - 1); k < B * j; ++k) {memo[i][j] |= memo[i][j] << A[k];}}}for (auto &x: A) {std::scanf("%u", &x);}while (Q--) {unsigned l, r, k;std::scanf("%u %u %u", &l, &r, &k);l -= 1;if (r - l <= B) {std::bitset<5001> dp;dp.set(0);for (unsigned i = l; i < r; ++i) {dp |= dp << A[i];}if (dp.test(k)) {std::puts("Yes");}else {std::puts("No");}}else {const unsigned lk = (l + B - 1) / B;const unsigned rk = r / B;auto dp = memo[lk][rk];for (unsigned k = l; k < B * lk; ++k) {dp |= dp << A[k];}for (unsigned k = B * rk; k < r; ++k) {dp |= dp << A[k];}if (dp.test(k)) {std::puts("Yes");}else {std::puts("No");}}}}