Submission #839416

#TimeUsernameProblemLanguageResultExecution timeMemory
839416vjudge1Examination (JOI19_examination)C++17
100 / 100
351 ms32836 KiB
#include <bits/stdc++.h>
using namespace std;

const int maxn = 2e5 + 5;
const int INF = 2e9 + 5;

int n, q;

pair<int, int> A[maxn];

pair<int, int> cp[maxn];

vector<int> FW[maxn], fake[maxn];
vector<int> qq[maxn];

pair<int, int> pos[maxn];
int ans[maxn];

void fadd(int x, int y) {
    for(x; x <= n; x += x&(-x)){
        fake[x].push_back(y);
    }
}

void add(int x, int y){
    for(x; x <= n; x += x&(-x)){
        for(int idx = upper_bound(fake[x].begin(), fake[x].end(), y) - fake[x].begin() - 1; idx < fake[x].size(); idx += idx&(-idx)) {
            FW[x][idx]++;
        }
    }
}

int query(int x, int y){
    int re = 0;
    for(x; x > 0; x -= x&(-x)) {
        for(int idx = upper_bound(fake[x].begin(), fake[x].end(), y) - fake[x].begin() - 1; idx > 0; idx -= idx&(-idx)) {
            re += FW[x][idx];
        }
    }
    return re;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> q;
    for (int i = 1; i <= n; i++)
    {
        cin >> A[i].first >> A[i].second;
        A[i].first *= -1;
        A[i].second *= -1;
    }
    sort(A + 1, A + n + 1);
    for(int i = 1; i <= n; i++){
        cp[i] = {A[i].second, i};
    }
    sort(cp + 1, cp + n + 1);
    for (int i = 1; i <= q; i++)
    {
        int x, y, c;
        cin >> x >> y >> c;
        x *= -1;
        y *= -1;
        c *= -1;
        qq[upper_bound(A + 1, A + n + 1, make_pair(x, n)) - A-1].push_back(i);
        pos[i] = {upper_bound(cp+1, cp+n+1, make_pair(y, n)) - cp - 1, c};
    }
    for(int i = 1; i <= n; i++){
        // cout << cp[i].first << endl;
        A[cp[i].second] = {i, A[cp[i].second].first + A[cp[i].second].second};
    }
    for(int i = 1; i <= n; i++){
        fadd(A[i].first, A[i].second);
    }
    for(int i = 1; i <= n; i++){
        fake[i].push_back(-INF);
        sort(fake[i].begin(), fake[i].end());
        fake[i].erase(unique(fake[i].begin(), fake[i].end()), fake[i].end());
        FW[i].assign(fake[i].size(), 0);
    }
    for(int i = 1; i <= n; i++){
        add(A[i].first, A[i].second);
        for(auto v: qq[i]){
            ans[v] = query(pos[v].first, pos[v].second);
        }
    }
    for(int i = 1; i <= q; i++)cout << ans[i] << "\n";
}

Compilation message (stderr)

examination.cpp: In function 'void fadd(int, int)':
examination.cpp:20:9: warning: statement has no effect [-Wunused-value]
   20 |     for(x; x <= n; x += x&(-x)){
      |         ^
examination.cpp: In function 'void add(int, int)':
examination.cpp:26:9: warning: statement has no effect [-Wunused-value]
   26 |     for(x; x <= n; x += x&(-x)){
      |         ^
examination.cpp:27:97: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |         for(int idx = upper_bound(fake[x].begin(), fake[x].end(), y) - fake[x].begin() - 1; idx < fake[x].size(); idx += idx&(-idx)) {
      |                                                                                             ~~~~^~~~~~~~~~~~~~~~
examination.cpp: In function 'int query(int, int)':
examination.cpp:35:9: warning: statement has no effect [-Wunused-value]
   35 |     for(x; x > 0; x -= x&(-x)) {
      |         ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...