Submission #1020242

# Submission time Handle Problem Language Result Execution time Memory
1020242 2024-07-11T18:07:38 Z codefox Examination (JOI19_examination) C++14
0 / 100
2059 ms 643188 KB
#include <bits/stdc++.h>

using namespace std;

#define pii pair<int, int>
#define pipii pair<int, pii>
#define pipi pair<pii, pii>
#pragma GCC optimize("Ofast")

int N = 1<<20;
vector<vector<int>> bin(2*N, vector<int>(1, 0));
vector<vector<int>> bleft(2*N, vector<int>(1, -1));
vector<vector<int>> bright(2*N, vector<int>(1, -1));
int K = 19;

void update(int a, int b)
{
    a += N;
    while (a)
    {
        int curr = 0;
        for (int i = K+1; i >= 0; i--)
        {
            bin[a][curr]++;
            if (b&(1<<i))
            {
                if (bright[a][curr]==-1)
                {
                    bright[a][curr] = bin[a].size();
                    curr = bin[a].size();
                    bin[a].push_back(0);
                    bleft[a].push_back(-1);
                    bright[a].push_back(-1);
                }
                else
                {
                    curr = bright[a][curr];
                }
            }
            else
            {
                if (bleft[a][curr]==-1)
                {
                    bleft[a][curr] = bin[a].size();
                    curr = bin[a].size();
                    bin[a].push_back(0);
                    bleft[a].push_back(-1);
                    bright[a].push_back(-1);
                }
                else
                {
                    curr = bleft[a][curr];
                }
            }
        }
        a/=2;
    }
}

int query(int a, int b)
{
    int sol = 0;
    int curr = 1;
    a++; b++;
    for (int i = K; i >= 0; i--)
    {
        curr*=2;
        if (a&(1<<i))
        {
            int curr2 = 0;
            for (int j = K+1; j >= 0; j--)
            {
                if (b&(1<<j))
                {
                    if (bleft[curr][curr2]!=-1) sol += bin[curr][bleft[curr][curr2]];
                    if (bright[curr][curr2]==-1) break;
                    curr2 = bright[curr][curr2];
                }
                else
                {
                    if (bleft[curr][curr2]==-1) break;
                    curr2 = bleft[curr][curr2];
                }
            }
            curr++;
        }
    }
    return sol;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n, q;
    cin >> n >> q;
    vector<pipii> scores(n);
    map<int, int> comp;
    set<int> coord;
    for (int i = 0; i < n; i++)
    {
        int a, b;
        cin >> a >> b;
        scores[i] = {a+b, {a, b}};
        coord.insert(a);
        coord.insert(b);
    }
    sort(scores.begin(), scores.end(), greater<pipii>());
    vector<pipi> queries(q);
    for (int i = 0; i < q; i++)
    {
        int a, b, c;
        cin >> a >> b >> c;
        queries[i] = {{c, i}, {a, b}};
        coord.insert(a);
        coord.insert(b);
    }
    sort(queries.begin(), queries.end(), greater<pipi>());
    int d = coord.size();
    for (int ele:coord)
    {
        comp[ele] = d--;
    }
    vector<int> sol(q);
    int curr = 0;
    for (auto ele:queries)
    {
        while (curr < scores.size() && scores[curr].first>= ele.first.first)
        {
            update(comp[scores[curr].second.first], comp[scores[curr].second.second]);
            //cout << comp[scores[curr].second.first] << " " << comp[scores[curr].second.second] << endl;
            curr++;
        }
        //cout << 1 << " " << comp[ele.second.first] << " " << comp[ele.second.second] << endl;
        sol[ele.first.second] = query(comp[ele.second.first], comp[ele.second.second]);
    }
    for (int ele:sol) cout << ele << "\n";
    return 0;
}

Compilation message

examination.cpp: In function 'int main()':
examination.cpp:130:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  130 |         while (curr < scores.size() && scores[curr].first>= ele.first.first)
      |                ~~~~~^~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 339 ms 345060 KB Output is correct
2 Correct 318 ms 345172 KB Output is correct
3 Correct 270 ms 345168 KB Output is correct
4 Correct 318 ms 345168 KB Output is correct
5 Correct 300 ms 345200 KB Output is correct
6 Correct 315 ms 345160 KB Output is correct
7 Correct 334 ms 356176 KB Output is correct
8 Correct 348 ms 356180 KB Output is correct
9 Correct 338 ms 356176 KB Output is correct
10 Incorrect 326 ms 349008 KB Output isn't correct
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2059 ms 643188 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2059 ms 643188 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 339 ms 345060 KB Output is correct
2 Correct 318 ms 345172 KB Output is correct
3 Correct 270 ms 345168 KB Output is correct
4 Correct 318 ms 345168 KB Output is correct
5 Correct 300 ms 345200 KB Output is correct
6 Correct 315 ms 345160 KB Output is correct
7 Correct 334 ms 356176 KB Output is correct
8 Correct 348 ms 356180 KB Output is correct
9 Correct 338 ms 356176 KB Output is correct
10 Incorrect 326 ms 349008 KB Output isn't correct
11 Halted 0 ms 0 KB -