Submission #53068439


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

vector<int> min_fac, num, A;
vector<vector<pair<int, int>>> new_factor;
vector<vector<int>> factor;
int N, Q, danger = 0;

void add(int i) {
    for(auto kv : new_factor[i]) {
        int k = kv.first, v = kv.second;
        num[k] += v;
        if(num[k] % 3 != 0 && (num[k] - v) % 3 == 0)
            danger++;
        if(num[k] % 3 == 0 && (num[k] - v) % 3 != 0)
            danger--;
    }
}

void del(int i) {
    for(auto kv : new_factor[i]) {
        int k = kv.first, v = kv.second;
        num[k] -= v;
        if(num[k] % 3 == 0 && (num[k] + v) % 3 != 0)
            danger--;
        if(num[k] % 3 != 0 && (num[k] + v) % 3 == 0)
            danger++;
    }
}

void Eratosthenes() {
    int n = *max_element(A.begin(), A.end());
    vector<bool> primes(n + 1, true);
    primes[0] = primes[1] = false;

    for(int i = 2; i <= n; i++) {
        if(primes[i]) {
            min_fac[i] = i;
            for(int j = 2 * i; j <= n; j += i) {
                primes[j] = false;
                if(min_fac[j] == -1)
                    min_fac[j] = i;
            }
        }
    }
}

void Factorization() {
    for(int i = 0; i < N; i++) {
        int now = A[i];
        while(true) {
            if(now == 1)
                break;
            if(min_fac[now] == now) {
                factor[i].push_back(now);
                break;
            } else {
                factor[i].push_back(min_fac[now]);
                now /= min_fac[now];
            }
        }
    }
}

int main() {
    cin >> N >> Q;
    int block = int(N / pow(Q, 0.5)) + 1;
    vector<vector<pair<int, pair<int, int>>>> queries((int)(pow(Q, 0.5)+1));

    A.resize(N);
    for(int i = 0; i < N; i++)
        cin >> A[i];

    for(int i = 0; i < Q; i++) {
        int L, R;
        cin >> L >> R;
        L--; R--; // 0-indexed
        queries[L / block].push_back(make_pair(i, make_pair(L, R)));
    }

    min_fac = vector<int>(*max_element(A.begin(), A.end()) + 1, -1);
    factor = vector<vector<int>>(N);
    Eratosthenes();
    Factorization();

    new_factor.resize(N);
    for(int i = 0; i < N; i++) {
        map<int, int> d;
        for(int j : factor[i])
            d[j]++;
        for(auto kv : d)
            new_factor[i].push_back(kv);
    }

    vector<int> ans(Q);
    int left = 0, right = 0;
    num = vector<int>(*max_element(A.begin(), A.end()) + 1, 0);
    danger = 0;

    for(int ind = 0; ind < queries.size(); ind++) {
        sort(queries[ind].begin(), queries[ind].end(), [&](pair<int, pair<int, int>> a, pair<int, pair<int, int>> b) {
            if(ind % 2 == 0)
                return a.second.second < b.second.second;
            else
                return a.second.second > b.second.second;
        });
        for(auto query : queries[ind]) {
            int i = query.first, l = query.second.first, r = query.second.second;
            while(right <= r) {
                add(right);
                right++;
            }
            while(l < left) {
                left--;
                add(left);
            }
            while(r + 1 < right) {
                right--;
                del(right);
            }
            while(left < l) {
                del(left);
                left++;
            }
            ans[i] = (danger == 0);
        }
    }

    for(int res : ans)
        cout << (res ? "Yes" : "No") << endl;

    return 0;
}

Submission Info

Submission Time
Task G - Cubic?
User ryusuke_h
Language C++ 20 (gcc 12.2)
Score 600
Code Size 3553 Byte
Status AC
Exec Time 2793 ms
Memory 47188 KiB

Compile Error

Main.cpp: In function ‘int main()’:
Main.cpp:100:26: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<std::vector<std::pair<int, std::pair<int, int> > > >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  100 |     for(int ind = 0; ind < queries.size(); ind++) {
      |                      ~~~~^~~~~~~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 1
AC × 70
Set Name Test Cases
Sample sample_01.txt
All sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_61.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt
Case Name Status Exec Time Memory
sample_01.txt AC 3 ms 3644 KiB
test_01.txt AC 8 ms 7960 KiB
test_02.txt AC 896 ms 22880 KiB
test_03.txt AC 152 ms 10440 KiB
test_04.txt AC 500 ms 25460 KiB
test_05.txt AC 949 ms 30424 KiB
test_06.txt AC 94 ms 13456 KiB
test_07.txt AC 239 ms 19404 KiB
test_08.txt AC 1827 ms 30028 KiB
test_09.txt AC 39 ms 12640 KiB
test_10.txt AC 327 ms 25852 KiB
test_11.txt AC 900 ms 31164 KiB
test_12.txt AC 403 ms 22032 KiB
test_13.txt AC 181 ms 24808 KiB
test_14.txt AC 1469 ms 36192 KiB
test_15.txt AC 343 ms 23096 KiB
test_16.txt AC 605 ms 27096 KiB
test_17.txt AC 619 ms 23556 KiB
test_18.txt AC 179 ms 13540 KiB
test_19.txt AC 355 ms 25712 KiB
test_20.txt AC 359 ms 11208 KiB
test_21.txt AC 706 ms 23940 KiB
test_22.txt AC 1077 ms 34604 KiB
test_23.txt AC 1531 ms 34448 KiB
test_24.txt AC 728 ms 31368 KiB
test_25.txt AC 1057 ms 27568 KiB
test_26.txt AC 1525 ms 28964 KiB
test_27.txt AC 719 ms 26560 KiB
test_28.txt AC 1058 ms 26772 KiB
test_29.txt AC 1522 ms 29116 KiB
test_30.txt AC 722 ms 29348 KiB
test_31.txt AC 1067 ms 32340 KiB
test_32.txt AC 1527 ms 28848 KiB
test_33.txt AC 813 ms 41144 KiB
test_34.txt AC 817 ms 41068 KiB
test_35.txt AC 812 ms 41328 KiB
test_36.txt AC 1074 ms 37764 KiB
test_37.txt AC 1145 ms 41108 KiB
test_38.txt AC 2079 ms 31276 KiB
test_39.txt AC 387 ms 17556 KiB
test_40.txt AC 1474 ms 37764 KiB
test_41.txt AC 791 ms 42632 KiB
test_42.txt AC 1077 ms 37972 KiB
test_43.txt AC 1139 ms 40812 KiB
test_44.txt AC 2793 ms 40880 KiB
test_45.txt AC 506 ms 30004 KiB
test_46.txt AC 954 ms 37076 KiB
test_47.txt AC 1691 ms 41224 KiB
test_48.txt AC 1073 ms 37892 KiB
test_49.txt AC 1139 ms 40960 KiB
test_50.txt AC 2074 ms 31280 KiB
test_51.txt AC 534 ms 37892 KiB
test_52.txt AC 1472 ms 37748 KiB
test_53.txt AC 2355 ms 41324 KiB
test_54.txt AC 1075 ms 37944 KiB
test_55.txt AC 1143 ms 41160 KiB
test_56.txt AC 2792 ms 40904 KiB
test_57.txt AC 642 ms 47188 KiB
test_58.txt AC 980 ms 37064 KiB
test_59.txt AC 1621 ms 41436 KiB
test_60.txt AC 1071 ms 37960 KiB
test_61.txt AC 1145 ms 41088 KiB
test_62.txt AC 1250 ms 28928 KiB
test_63.txt AC 769 ms 42124 KiB
test_64.txt AC 1474 ms 37708 KiB
test_65.txt AC 2367 ms 41264 KiB
test_66.txt AC 1077 ms 37904 KiB
test_67.txt AC 1143 ms 40768 KiB
test_68.txt AC 2081 ms 31316 KiB
test_69.txt AC 1030 ms 45520 KiB