답안 #746648

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
746648 2023-05-23T00:20:16 Z Olympia Radio (COCI22_radio) C++17
10 / 110
1500 ms 9104 KB
#include <vector>
#include <iostream>
#include <cassert>
#include <cmath>
#include <map>
using namespace std;
struct SegmentTree {
    vector<int> vec;
    const int id = 0;
    int merge (int x, int y) {
        return x + y;
    }
    void update (int x, int y) {
        x += (int)vec.size()/2 - 1;
        vec[x] = y;
        while (x != 0) {
            x = (x - 1)/2;
            vec[x] = merge(vec[2 * x + 1], vec[2 * x + 2]);
        }
    }
    int query (int dum, int tl, int tr, int l, int r) {
        if (tl >= l and tr <= r) {
            return vec[dum];
        }
        if (tl > r or tr < l) {
            return id;
        }
        return merge(query(2 * dum + 1, tl, (tl + tr)/2, l, r), query(2 * dum + 2, (tl + tr)/2 + 1, tr, l, r));
    }
    int query (int l, int r) {
        return query(0, 0, (int)vec.size()/2 - 1, l, r);
    }
    SegmentTree (int n) {
        n = (1 << ((int)log2(n) + 1));
        vec.assign(2 * n, 0);
    }
};
int main () {
    int N, Q;
    cin >> N >> Q;
    vector<vector<int>> queries;
    vector<bool> ans;
    ans.assign(Q, false);
    while (Q--) {
        char c;
        cin >> c;
        if (c == 'C') {
            int x, y;
            cin >> x >> y;
            queries.push_back({--x, --y});
        } else {
            int x; cin >> x;
            queries.push_back({--x});
        }
    }
    vector<bool> act;
    for (int i = 2; i <= N; i++) {
        act.assign(N, false);
        SegmentTree st(N);
        for (int j = 0; j < queries.size(); j++) {
            auto q = queries[j];
            if (q.size() == 1) {
                if ((q[0] + 1) % i == 0) {
                    if (!act[q[0]]) {
                        st.update(q[0], 1);
                    } else {
                        st.update(q[0], 0);
                    }
                    act[q[0]] = not act[q[0]];
                }
            } else {
                int l = q[0], r = q[1];
                if (st.query(l, r) >= 2) {
                    ans[j] = true;
                }
            }
        }
    }
    for (int i = 0; i < queries.size(); i++) {
        if (queries[i].size() == 2) {
            cout << (ans[i] ? "DA" : "NE") << '\n';
        }
    }
}

Compilation message

Main.cpp: In function 'int main()':
Main.cpp:60:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |         for (int j = 0; j < queries.size(); j++) {
      |                         ~~^~~~~~~~~~~~~~~~
Main.cpp:79:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |     for (int i = 0; i < queries.size(); i++) {
      |                     ~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 312 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 2 ms 212 KB Output is correct
5 Correct 2 ms 304 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1567 ms 9104 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 312 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 2 ms 212 KB Output is correct
5 Correct 2 ms 304 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Execution timed out 1567 ms 9104 KB Time limit exceeded
9 Halted 0 ms 0 KB -