Submission #1231809

#TimeUsernameProblemLanguageResultExecution timeMemory
1231809AishaTrampoline (info1cup20_trampoline)C++20
42 / 100
2096 ms66748 KiB
#include "bits/stdc++.h"

using namespace std;

#define int long long

signed main() {
    int r, c, n;
    cin >> r >> c >> n;

    vector <int> a(n);
    vector <int> b(n);

    for (int i = 0; i < n; i ++) cin >> a[i] >> b[i];
    set <pair <int, int>> st;
    for (int i = 0; i < n; i ++) st.insert({a[i], b[i]});

    map <pair <int, int>, vector <pair <int, int>>> g;
    vector <int> x1;  
    vector <int> x2;

    int x_f = -1, x_s = -1;

    for (auto [i, j] : st) {
        if (x_f == -1) {
            x_f = i;
            x1.push_back(j);
            continue;
        }

        if (i == x_f) {
            //g[{i, j}].push_back({x_f, x1.back()});
            g[{x_f, x1.back()}].push_back({i, j});
            x1.push_back(j);
            continue;
        }

        if (x_s == -1 && i == x_f + 1) {
            x_s = i;
            x2.push_back(j);

            int ind = upper_bound(x1.begin(), x1.end(), j) - x1.begin();
            if (ind == 0) continue;
            ind --;
            //  g[{i, j}].push_back({x_f, x1[ind]});
            g[{x_f, x1[ind]}].push_back({i, j});
            continue;
        }

        if (x_s == -1) {
            x1.clear();

            x_f = i;
            x1.push_back(j);
            continue;
        }

        if (x_s == i) {
          // g[{i, j}].push_back({x_s, x2.back()});
            g[{x_s, x2.back()}].push_back({i, j});

            int ind = upper_bound(x1.begin(), x1.end(), j) - x1.begin();
            if (ind == 0) continue;
            ind --;
         //   g[{i, j}].push_back({x_f, x1[ind]});
            g[{x_f, x1[ind]}].push_back({i, j});
            continue;
        }

        if (x_s + 1 == i) {
            x_f = x_s;
            x1.swap(x2);
            x2.clear();
            x_s = i;
            x2.push_back(j);

            int ind = upper_bound(x1.begin(), x1.end(), j) - x1.begin();
            if (ind == 0) continue;
            ind --;
            //  g[{i, j}].push_back({x_f, x1[ind]});
            g[{x_f, x1[ind]}].push_back({i, j});

            continue;
        }

        if (x_s + 1 < i) {
            x1.clear();
            x2.clear();
            x_s = -1;
            x_f = i;
            x1.push_back(j);
            continue;
        }
    }

    /*
    // Graph

    for (auto [ind, v] : g) {
        int x = ind.first;
        int y = ind.second;
        cout << "x =, y = " << x << ' ' << y << endl;

        for (auto [i, j] : v) {
            cout << i << ' ' << j << endl;
        }
        cout << endl;
    }

    //
    */


    map <pair <int, int>, int> vis;
    map <pair <int, int>, int> col;
    int cnt = 0;
    
    auto bfs = [&] (int i, int j) -> void {
        cnt ++;

        queue <pair <int, int>> q;
        q.push({i, j});
        vis[{i, j}] = 1;
        col[{i, j}] = cnt;

        while (!q.empty()) {
            i = q.front().first, j = q.front().second;
            q.pop();

            for (auto [x, y] : g[{i, j}]) {
                if (vis[{x, y}]) continue;
                vis[{x, y}] = 1;
                col[{x, y}] = cnt;
                q.push({x, y});
            }
        }
    };

    for (auto [i, j] : st) {
        if (vis[{i, j}]) continue;
        bfs(i, j);
    }

    int t;
    cin >> t;

    while (t --) {
        int sx, sy, ex, ey;
        cin >> sx >> sy >> ex >> ey;

        int x = sx, y = sy;
        for (auto [i, j] : st) {
            if (i < x || j < y) continue;
            if (i > x) break;
            // i == x
            if (j <= ey && x < ex) y = j, x ++;
        }
        
        if (x == ex && y <= ey) cout << "Yes" << endl;
        else cout << "No" << endl;
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...