Submission #698571

# Submission time Handle Problem Language Result Execution time Memory
698571 2023-02-13T21:21:11 Z hazzle Trampoline (info1cup20_trampoline) C++17
42 / 100
1130 ms 1048576 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

#define fi first
#define se second
#define all(m) (m).begin(), (m).end()
#define rall(m) (m).rbegin(), (m).rend()
#define vec vector
#define sz(a) (int) (a).size()
#define mpp make_pair
#define mtt make_tuple

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef tuple <int, int, int> tui;

template <typename T> bool umin(T &a, T b) { return a > b ? a = b, 1 : 0; }
template <typename T> bool umax(T &a, T b) { return a < b ? a = b, 1 : 0; }

const int N = 2e5 + 42;

int solve(){
        int r, c, n;
        cin >> r >> c >> n;
        vec <pii> a(n);
        map <pii, int> id;
        map <int, vec <int>> v;
        for (int i = 0; i < n; ++i){
                auto &[x, y] = a[i];
                cin >> x >> y;
                id[{x, y}] = i;
                v[x].push_back(y);
        }

        for (auto &[x, c]: v) sort(all(c));

        auto nxt = [&](int x, int y){
                if (v[x].empty()) return -1;
                auto it = lower_bound(all(v[x]), y);
                return it == v[x].end() ? -1 : id[mpp(x, *it)];
        };

        auto prv = [&](int x, int y){
                if (v[x].empty()) return -1;
                auto it = upper_bound(all(v[x]), y);
                return it == v[x].begin() ? -1 : id[mpp(x, *--it)];
        };

        vec <vec <int>> g(n);

        for (int i = 0; i < n; ++i){
                auto [x, y] = a[i];
                if (~nxt(x, y + 1)){
                        g[i].push_back(nxt(x, y + 1));
                }
                if (~nxt(x + 1, y)){
                        g[i].push_back(nxt(x + 1, y));
                }
        }

        vec <bitset <N>> bb(n);

        auto dfs = [&](auto &&dfs, int u) -> void {
                bb[u][u] = 1;
                for (auto &v: g[u]){
                        if (!bb[v][v]) dfs(dfs, v);
                        bb[u] |= bb[v];
                }
        };

        for (int i = 0; i < n; ++i){
                dfs(dfs, i);
        }

//        for (int i = 0; i < n; ++i){
//                for (auto &j: g[i]){
//                        auto [cx, cy] = a[i];
//                        auto [nx, ny] = a[j];
//                        cout << cx << " " << cy << " -> " << nx << " " << ny << "\n";
//                }
//        }

        int q; cin >> q;
        while(q--){
                int sx, sy, tx, ty;
                cin >> sx >> sy >> tx >> ty;
                if (tx < sx || ty < sy){
                        cout << "No\n";
                        continue;
                }
                if (sx == tx){
                        cout << "Yes\n";
                        continue;
                }
                int i = nxt(sx, sy);
                int j = prv(tx, ty);
//                cout << " try " << i + 1 << " " << j + 1 << "\n";
                if (~i && ~j && bb[i][j]){
                        cout << "Yes\n";
                        continue;
                }
                j = prv(tx - 1, ty);
//                cout << " try " << i + 1 << " " << j + 1 << "\n";
                if (~i && ~j && bb[i][j]){
//                        cout << i + 1 << " " << j + 1 << " ";
                        cout << "Yes\n";
                        continue;
                }
                cout << "No\n";
        }

        return 0;
}

signed main(){
        ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
        int tst = 1; //cin >> tst;
        while(tst--) solve();
        return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 184 ms 216032 KB 200 token(s): yes count is 21, no count is 179
2 Correct 212 ms 246392 KB 200 token(s): yes count is 70, no count is 130
3 Correct 157 ms 173656 KB 197 token(s): yes count is 25, no count is 172
# Verdict Execution time Memory Grader output
1 Runtime error 1046 ms 1048576 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 889 ms 1048576 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 120 ms 123596 KB 5000 token(s): yes count is 3238, no count is 1762
2 Correct 120 ms 123568 KB 5000 token(s): yes count is 3837, no count is 1163
3 Correct 73 ms 124384 KB 5000 token(s): yes count is 4104, no count is 896
4 Correct 118 ms 123668 KB 5000 token(s): yes count is 3934, no count is 1066
5 Correct 108 ms 123696 KB 5000 token(s): yes count is 3384, no count is 1616
6 Correct 124 ms 123732 KB 5000 token(s): yes count is 3390, no count is 1610
# Verdict Execution time Memory Grader output
1 Runtime error 1130 ms 1048576 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -