답안 #528421

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
528421 2022-02-20T09:04:49 Z N1NT3NDO Osumnjičeni (COCI21_osumnjiceni) C++14
40 / 110
1000 ms 30500 KB
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
#define sz(x) (int)x.size()
#define fi first
#define sd second
#define all(x) x.begin(), x.end()
//#pragma GCC target ("avx2")
//#pragma GCC optimization ("O3")
//#pragma GCC optimization ("unroll-loops")

using namespace std;
//using namespace __gnu_pbds;

//typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;

const int N = (int)2e5 + 5;
int n, l[N], r[N], q, nxt[N], mn[N][22], lg[N], t[8 * N], mod[8 * N], mx;
vector<int> vec;

bool intersect(const pair<int, int> &a, const pair<int, int> &b)
{
    int L = max(a.fi, b.fi);
    int R = min(a.sd, b.sd);
    return R >= L;
}

int get(int l, int r)
{
    int t = lg[r - l + 1];
    return min(mn[l][t], mn[r - (1 << t) + 1][t]);
}

void push(int v, int tl, int tr)
{
    if (tl == tr) return;
    mod[v + v] = min(mod[v + v], mod[v]);
    mod[v + v + 1] = min(mod[v + v + 1], mod[v]);
    t[v + v] = min(t[v + v], mod[v]);
    t[v + v + 1] = min(t[v + v + 1], mod[v]);
}

void build(int v, int tl, int tr)
{
    if (tl == tr)
    {
        t[v] = n + 1;
        mod[v] = n + 1;
        return;
    }

    int m = (tl + tr) >> 1;
    build(v + v, tl, m);
    build(v + v + 1, m + 1, tr);
    t[v] = min(t[v + v], t[v + v + 1]);
    mod[v] = n + 1;
}

int get(int v, int tl, int tr, int l, int r)
{
    push(v, tl, tr);
    if (tl > tr || tl > r || tr < l) return n + 1;

    if (tl >= l && tr <= r)
      return t[v];

    //push(v, tl, tr);
    int m = (tl + tr) >> 1;
    return min(get(v + v, tl, m, l, r), get(v + v + 1, m + 1, tr, l, r));
}

void upd(int v, int tl, int tr, int l, int r, int val)
{
    push(v, tl, tr);
    if (tl > tr || tl > r || tr < l) return;

    if (tl >= l && tr <= r)
    {
        t[v] = min(t[v], val);
        mod[v] = min(mod[v], val);
        //push(v, tl, tr);
        return;
    }

    int m = (tl + tr) >> 1;
    //push(v, tl, tr);
    upd(v + v, tl, m, l, r, val);
    upd(v + v + 1, m + 1, tr, l, r, val);
    t[v] = min(t[v + v], t[v + v + 1]);
}

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n;
    lg[1] = 0;
    for(int i = 2; i <= n; i++) lg[i] = lg[i / 2] + 1;
    for(int i = 1; i <= n; i++)
    {
        cin >> l[i] >> r[i];
        vec.pb(l[i]);
        vec.pb(r[i]);
    }

    sort(all(vec));
    vec.erase(unique(all(vec)), vec.end());
    for(int i = 1; i <= n; i++)
    {
        l[i] = lower_bound(all(vec), l[i]) - vec.begin(); l[i]++;
        r[i] = lower_bound(all(vec), r[i]) - vec.begin(); r[i]++;
        mx = max(mx, l[i]);
        mx = max(mx, r[i]);
    }

    build(1, 1, mx);
    for(int i = n; i >= 1; i--)
    {

        int val = get(1, 1, mx, l[i], r[i]);
        nxt[i] = val;

        mn[i][0] = nxt[i];
        upd(1, 1, mx, l[i], r[i], i);
    }

    for(int i = 1; (1 << i) <= n; i++)
    {
        for(int j = 1; j + (1 << i) - 1 <= n; j++)
          mn[j][i] = min(mn[j][i - 1], mn[j + (1 << (i - 1))][i - 1]);
    }

    cin >> q;
    while(q--)
    {
        int le, ri;
        cin >> le >> ri;
        int i = le, ans = 0;
        while(i <= ri)
        {
            int mn = get(i, nxt[i] - 1);
            mn = min(mn, ri + 1);
            ans++;
            i = mn;
        }

        cout << ans << '\n';
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 389 ms 29540 KB Output is correct
2 Correct 392 ms 29240 KB Output is correct
3 Correct 381 ms 29240 KB Output is correct
4 Correct 397 ms 29608 KB Output is correct
5 Correct 460 ms 30468 KB Output is correct
6 Correct 72 ms 20280 KB Output is correct
7 Correct 76 ms 20596 KB Output is correct
8 Correct 83 ms 20796 KB Output is correct
9 Correct 95 ms 21296 KB Output is correct
10 Correct 97 ms 20616 KB Output is correct
11 Correct 294 ms 30076 KB Output is correct
12 Correct 270 ms 28760 KB Output is correct
13 Correct 275 ms 28728 KB Output is correct
14 Correct 296 ms 30016 KB Output is correct
15 Correct 275 ms 29532 KB Output is correct
16 Correct 0 ms 332 KB Output is correct
17 Correct 77 ms 21616 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 74 ms 1228 KB Output is correct
2 Correct 66 ms 1184 KB Output is correct
3 Correct 65 ms 1100 KB Output is correct
4 Correct 68 ms 1216 KB Output is correct
5 Correct 65 ms 1220 KB Output is correct
6 Correct 83 ms 964 KB Output is correct
7 Correct 56 ms 940 KB Output is correct
8 Correct 47 ms 964 KB Output is correct
9 Correct 40 ms 936 KB Output is correct
10 Correct 28 ms 844 KB Output is correct
11 Correct 6 ms 1228 KB Output is correct
12 Correct 5 ms 1100 KB Output is correct
13 Correct 6 ms 1100 KB Output is correct
14 Correct 6 ms 1228 KB Output is correct
15 Correct 7 ms 1244 KB Output is correct
16 Correct 1 ms 332 KB Output is correct
17 Correct 252 ms 956 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 74 ms 1228 KB Output is correct
2 Correct 66 ms 1184 KB Output is correct
3 Correct 65 ms 1100 KB Output is correct
4 Correct 68 ms 1216 KB Output is correct
5 Correct 65 ms 1220 KB Output is correct
6 Correct 83 ms 964 KB Output is correct
7 Correct 56 ms 940 KB Output is correct
8 Correct 47 ms 964 KB Output is correct
9 Correct 40 ms 936 KB Output is correct
10 Correct 28 ms 844 KB Output is correct
11 Correct 6 ms 1228 KB Output is correct
12 Correct 5 ms 1100 KB Output is correct
13 Correct 6 ms 1100 KB Output is correct
14 Correct 6 ms 1228 KB Output is correct
15 Correct 7 ms 1244 KB Output is correct
16 Correct 1 ms 332 KB Output is correct
17 Correct 252 ms 956 KB Output is correct
18 Execution timed out 1081 ms 1552 KB Time limit exceeded
19 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 477 ms 30500 KB Output is correct
2 Correct 454 ms 30028 KB Output is correct
3 Correct 458 ms 28576 KB Output is correct
4 Correct 419 ms 28436 KB Output is correct
5 Correct 450 ms 29084 KB Output is correct
6 Correct 133 ms 20392 KB Output is correct
7 Correct 129 ms 20236 KB Output is correct
8 Correct 127 ms 20520 KB Output is correct
9 Correct 135 ms 20192 KB Output is correct
10 Correct 178 ms 21940 KB Output is correct
11 Correct 316 ms 28564 KB Output is correct
12 Correct 291 ms 30480 KB Output is correct
13 Correct 269 ms 28564 KB Output is correct
14 Correct 277 ms 29160 KB Output is correct
15 Correct 292 ms 30324 KB Output is correct
16 Correct 0 ms 332 KB Output is correct
17 Correct 303 ms 20660 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 389 ms 29540 KB Output is correct
2 Correct 392 ms 29240 KB Output is correct
3 Correct 381 ms 29240 KB Output is correct
4 Correct 397 ms 29608 KB Output is correct
5 Correct 460 ms 30468 KB Output is correct
6 Correct 72 ms 20280 KB Output is correct
7 Correct 76 ms 20596 KB Output is correct
8 Correct 83 ms 20796 KB Output is correct
9 Correct 95 ms 21296 KB Output is correct
10 Correct 97 ms 20616 KB Output is correct
11 Correct 294 ms 30076 KB Output is correct
12 Correct 270 ms 28760 KB Output is correct
13 Correct 275 ms 28728 KB Output is correct
14 Correct 296 ms 30016 KB Output is correct
15 Correct 275 ms 29532 KB Output is correct
16 Correct 0 ms 332 KB Output is correct
17 Correct 77 ms 21616 KB Output is correct
18 Correct 74 ms 1228 KB Output is correct
19 Correct 66 ms 1184 KB Output is correct
20 Correct 65 ms 1100 KB Output is correct
21 Correct 68 ms 1216 KB Output is correct
22 Correct 65 ms 1220 KB Output is correct
23 Correct 83 ms 964 KB Output is correct
24 Correct 56 ms 940 KB Output is correct
25 Correct 47 ms 964 KB Output is correct
26 Correct 40 ms 936 KB Output is correct
27 Correct 28 ms 844 KB Output is correct
28 Correct 6 ms 1228 KB Output is correct
29 Correct 5 ms 1100 KB Output is correct
30 Correct 6 ms 1100 KB Output is correct
31 Correct 6 ms 1228 KB Output is correct
32 Correct 7 ms 1244 KB Output is correct
33 Correct 1 ms 332 KB Output is correct
34 Correct 252 ms 956 KB Output is correct
35 Execution timed out 1081 ms 1552 KB Time limit exceeded
36 Halted 0 ms 0 KB -