답안 #685518

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
685518 2023-01-24T13:07:19 Z Farhan_HY Trampoline (info1cup20_trampoline) C++14
0 / 100
579 ms 76920 KB
#include <bits/stdc++.h>
#define int long long
#define F first
#define S second
#define T int t; cin >> t; while(t--)
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

const int N = 1e5 + 5;
const int M = 1e3 + 3;
const int inf = 1e18;
const int mod = 1e9 + 7;
int r, c, n, q, sp[30][N];
pair<int, int> a[N];
map<int, set<int>> tramps;
map<pair<int, int>, int> trampNum;

void build() {
    for(int i = 1; i <= n; i++) {
        auto it = tramps[a[i].S - 1].upper_bound(a[i].F);
        if (it != tramps[a[i].S - 1].begin())
            sp[0][i] = trampNum[{*(--it), a[i].S - 1}];
    }
    for(int j = 1; j < 26; j++)
        for(int i = 1; i <= n; i++)
            sp[j][i] = sp[j - 1][sp[j - 1][i]];
}

int get(int i, int num) {
    int me = i;
    for(int j = 0; j < 26; j++) {
        if ((num & (1 << j)) == 0) continue;
        int he = sp[j][me];
        if (he == 0) return 0;
        me = he;
    }
    return me;
}

main() {
    IOS
    cin >> r >> c >> n;
    for(int i = 1; i <= n; i++) {
        cin >> a[i].S >> a[i].F;
        tramps[a[i].S].insert(a[i].F);
        trampNum[a[i]] = i;
    }
    build();
    cin >> q;
    while(q--) {
        int y1, x1, y2, x2;
        cin >> y1 >> x1 >> y2 >> x2;
        if (x1 > x2) {
            cout << "No\n";
            continue;
        }
        if (y1 == y2) {
            cout << "Yes\n";
            continue;
        }
        auto it = tramps[y1].lower_bound(x1);
        if (it == tramps[y1].end()) {
            cout << "No\n";
            continue;
        }
        x1 = *it;
        it = tramps[y2].upper_bound(x2);
        if (tramps[y2].size() && it != tramps[y2].begin()) {
            it--;
            int par = get(trampNum[{*it, y2}], y2 - y1);
            if (par == trampNum[{x1, y1}]) {
                cout << "Yes\n";
                continue;
            }
        }
        it = tramps[y2 - 1].upper_bound(x2);
        if (tramps[y2 - 1].size() && it != tramps[y2 - 1].begin()) {
            it--;
            int num = trampNum[{*it, y2 - 1}];
            int par = get(num, y2 - y1 - 1);
            if (par == trampNum[{x1, y1}]) {
                cout << "Yes\n";
                continue;
            }
        }
        cout << "No\n";
    }
}

Compilation message

trampoline.cpp:40:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   40 | main() {
      | ^~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 10 ms 3284 KB expected YES, found NO [1st token]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 579 ms 49796 KB expected YES, found NO [3rd token]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 363 ms 52560 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 13 ms 2132 KB expected YES, found NO [1st token]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 462 ms 76920 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -