답안 #690857

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
690857 2023-01-30T13:15:49 Z andrei_iorgulescu Trampoline (info1cup20_trampoline) C++14
11 / 100
331 ms 31120 KB
#include <bits/stdc++.h>

using namespace std;

int r,c,n,t;
pair<int,int>a[200005];
int nxt[200005][20];
int lg[200005];

void nxt0()
{
    stack<int>s;
    for (int i = n; i >= 1; i--)
    {
        while (!s.empty() and a[s.top()].second < a[i].second)
            s.pop();
        if (!s.empty())
            nxt[i][0] = s.top();
        s.push(i);
    }
}

void prec()
{
    nxt0();
    for (int i = 2; i <= 200000; i++)
        lg[i] = 1 + lg[i / 2];
    for (int j = 1; j <= lg[n]; j++)
    {
        for (int i = 1; i <= n - (1 << j) + 1; i++)
        {
            int n1 = nxt[i][j - 1];
            if (n1 == 0)
                nxt[i][j] = 0;
            else
            {
                int n2 = nxt[n1][j - 1];
                if (n2 == 0)
                    nxt[i][j] = 0;
                else
                    nxt[i][j] = n2;
            }
        }
    }
    /*for (int j = 0; j <= lg[n]; j++)
    {
        for (int i = 1; i <= n - (1 << j) + 1; i++)
            cout << nxt[i][j] << ' ';
        cout << '\n';
    }*/
}

void jump(int x,int y)
{
    int pas = lg[n];
    while (pas != -1)
    {
        if (nxt[x][pas] != 0 and nxt[x][pas] <= y)
            x = nxt[x][pas];
        pas--;
    }
    if (x == y)
        cout << "Yes\n";
    else
        cout << "No\n";
}

void query(int xs,int ys,int xf,int yf)
{
    if (xs > xf or ys > yf)
    {
        cout << "No\n";
        return;
    }
    if (xs == xf)
    {
        cout << "Yes\n";
        return;
    }
    int ts = 0,tf = 0;
    int pas = 1 << 17;
    pair<int,int>cp = {xs,ys};
    while (pas != 0)
    {
        if (ts + pas <= n and a[ts + pas] < cp)
            ts += pas;
        pas /= 2;
    }
    ts++;
    if (ts <= n and a[ts].first == xs)
        ts += 0;
    else
        ts = 0;
    xf--;
    pas = 1 << 17;
    cp = {xf,yf};
    while (pas != 0)
    {
        if (tf + pas <= n and a[tf + pas] <= cp)
            tf += pas;
        pas /= 2;
    }
    if (tf != 0 and a[tf].first == xf)
        tf += 0;
    else
        tf = 0;
    //cout << ts << ' ' << tf << '\n';
    if (ts == 0 or tf == 0)
    {
        cout << "No\n";
        return;
    }
    jump(ts,tf);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> r >> c >> n;
    for (int i =1 ; i <= n; i++)
        cin >> a[i].first >> a[i].second;
    sort(a + 1,a + n + 1);
    prec();
    cin >> t;
    for (int i =1 ; i <= t; i++)
    {
        int xs,ys,xf,yf;
        cin >> xs >> ys >> xf >> yf;
        query(xs,ys,xf,yf);
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 1880 KB expected YES, found NO [1st token]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 81 ms 20060 KB expected YES, found NO [3rd token]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 263 ms 31120 KB 200000 token(s): yes count is 110486, no count is 89514
2 Correct 259 ms 31088 KB 200000 token(s): yes count is 114664, no count is 85336
3 Correct 274 ms 30792 KB 200000 token(s): yes count is 86232, no count is 113768
4 Correct 250 ms 30660 KB 200000 token(s): yes count is 94603, no count is 105397
5 Correct 244 ms 30688 KB 200000 token(s): yes count is 94148, no count is 105852
6 Correct 241 ms 30688 KB 200000 token(s): yes count is 97163, no count is 102837
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 1752 KB expected YES, found NO [1st token]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 331 ms 30848 KB expected YES, found NO [1st token]
2 Halted 0 ms 0 KB -