답안 #836883

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
836883 2023-08-24T16:49:34 Z borisAngelov Examination (JOI19_examination) C++17
20 / 100
122 ms 15808 KB
#include <bits/stdc++.h>

using namespace std;

const int maxn = 600005;
const int max_number = 600000;

int n, q;

struct element
{
    int x;
    int y;
    int z;
    int is_query;
    int query_idx;
};

element a[maxn];

void compress()
{
    vector<int> to_sort;
    unordered_map<int, int> compressed;
    int curr_value = 0;

    for (int i = 1; i <= n + q; ++i)
    {
        to_sort.push_back(a[i].x);
        to_sort.push_back(a[i].y);
        to_sort.push_back(a[i].z);
    }

    sort(to_sort.begin(), to_sort.end());

    for (int i = 0; i < to_sort.size(); ++i)
    {
        if (i == 0 || to_sort[i] != to_sort[i - 1])
        {
            compressed[to_sort[i]] = ++curr_value;
        }
    }

    for (int i = 1; i <= n + q; ++i)
    {
        a[i].x = compressed[a[i].x];
        a[i].y = compressed[a[i].y];
        a[i].z = compressed[a[i].z];
    }
}

int answers[maxn];

struct fenwick_tree
{
    int tree[maxn];

    void update(int pos, int delta)
    {
        for (int i = pos; i <= max_number; i += (i & (-i)))
        {
            tree[i] += delta;
        }
    }

    int query(int pos)
    {
        int result = 0;

        for (int i = pos; i >= 1; i -= (i & (-i)))
        {
            result += tree[i];
        }

        return result;
    }
};

fenwick_tree bit;

void fastIO()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}

int main()
{
    fastIO();

    cin >> n >> q;

    for (int i = 1; i <= n; ++i)
    {
        cin >> a[i].x >> a[i].y;
        a[i].z = a[i].x + a[i].y;
    }

    for (int i = 1; i <= q; ++i)
    {
        cin >> a[i + n].x >> a[i + n].y >> a[i + n].z;
        a[i + n].is_query = true;
        a[i + n].query_idx = i;
    }

    compress();

    sort(a + 1, a + n + q + 1, [&](element fr, element sc)
    {
        return make_pair(fr.x, -fr.is_query) > make_pair(sc.x, -sc.is_query);
    });

    for (int i = 1; i <= n + q; ++i)
    {
        if (a[i].is_query == false)
        {
            bit.update(a[i].y, +1);
        }
        else
        {
            answers[a[i].query_idx] = (bit.query(max_number) - bit.query(a[i].y - 1));
        }
    }

    for (int i = 1; i <= q; ++i)
    {
        cout << answers[i] << "\n";
    }

    return 0;
}

/*
5 4
35 100
70 70
45 15
80 40
20 95
20 50 0
10 10 0
60 60 0
0 100 0
*/

Compilation message

examination.cpp: In function 'void compress()':
examination.cpp:36:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |     for (int i = 0; i < to_sort.size(); ++i)
      |                     ~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 112 ms 12364 KB Output is correct
2 Correct 106 ms 12364 KB Output is correct
3 Correct 108 ms 12380 KB Output is correct
4 Correct 101 ms 11468 KB Output is correct
5 Correct 85 ms 11456 KB Output is correct
6 Correct 61 ms 9456 KB Output is correct
7 Correct 105 ms 14600 KB Output is correct
8 Correct 106 ms 14520 KB Output is correct
9 Correct 104 ms 14284 KB Output is correct
10 Correct 78 ms 13116 KB Output is correct
11 Correct 92 ms 12948 KB Output is correct
12 Correct 53 ms 9476 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 112 ms 12364 KB Output is correct
2 Correct 106 ms 12364 KB Output is correct
3 Correct 108 ms 12380 KB Output is correct
4 Correct 101 ms 11468 KB Output is correct
5 Correct 85 ms 11456 KB Output is correct
6 Correct 61 ms 9456 KB Output is correct
7 Correct 105 ms 14600 KB Output is correct
8 Correct 106 ms 14520 KB Output is correct
9 Correct 104 ms 14284 KB Output is correct
10 Correct 78 ms 13116 KB Output is correct
11 Correct 92 ms 12948 KB Output is correct
12 Correct 53 ms 9476 KB Output is correct
13 Incorrect 122 ms 15808 KB Output isn't correct
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -