QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#410581#6222. 精准预测Max_s_xaM40 1944ms801412kbC++175.8kb2024-05-14 10:10:232024-05-14 10:10:24

Judging History

你现在查看的是最新测评结果

  • [2024-05-14 10:10:24]
  • 评测
  • 测评结果:40
  • 用时:1944ms
  • 内存:801412kb
  • [2024-05-14 10:10:23]
  • 提交

answer

#include <iostream>
#include <algorithm>
#include <queue>
#include <bitset>

typedef long long ll;
typedef double lf;

// #define DEBUG 1
struct IO
{
    #define MAXSIZE (1 << 20)
    #define isdigit(x) (x >= '0' && x <= '9')
    char buf[MAXSIZE], *p1, *p2;
    char pbuf[MAXSIZE], *pp;
    #if DEBUG
    #else
    IO() : p1(buf), p2(buf), pp(pbuf) {}
    ~IO() {fwrite(pbuf, 1, pp - pbuf, stdout);}
    #endif
    #define gc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin), p1 == p2) ? ' ' : *p1++)
    #define blank(x) (x == ' ' || x == '\n' || x == '\r' || x == '\t')

    template <typename T>
    void Read(T &x)
    {
        #if DEBUG
        std::cin >> x;
        #else
        bool sign = 0; char ch = gc(); x = 0;
        for (; !isdigit(ch); ch = gc())
            if (ch == '-') sign = 1;
        for (; isdigit(ch); ch = gc()) x = x * 10 + (ch ^ 48);
        if (sign) x = -x;
        #endif
    }
    void Read(char *s)
    {
        #if DEBUG
        std::cin >> s;
        #else
        char ch = gc();
        for (; blank(ch); ch = gc());
        for (; !blank(ch); ch = gc()) *s++ = ch;
        *s = 0;
        #endif
    }
    void Read(char &c) {for (c = gc(); blank(c); c = gc());}

    void Push(const char &c)
    {
        #if DEBUG
        putchar(c);
        #else
        if (pp - pbuf == MAXSIZE) fwrite(pbuf, 1, MAXSIZE, stdout), pp = pbuf;
        *pp++ = c;
        #endif
    }
    template <typename T>
    void Write(T x)
    {
        if (x < 0) x = -x, Push('-');
        static T sta[35];
        int top = 0;
        do sta[top++] = x % 10, x /= 10; while (x);
        while (top) Push(sta[--top] ^ 48);
    }
    template <typename T>
    void Write(T x, char lst) {Write(x), Push(lst);}
} IO;
#define Read(x) IO.Read(x)
#define Write(x, y) IO.Write(x, y)
#define Put(x) IO.Push(x)

using namespace std;

const int MAXN = 5e4 + 10, MAXM = 1e5 + 10, MAXV = 5e5 + 10;

int t, n, m, ans[MAXN];

struct Edge
{
    int op, x, u, v;
}e[MAXM];
vector <int> pt[MAXN], vid[MAXN];

vector <int> g[MAXV];
int vt;

int dfn[MAXV], low[MAXV], clk, scc[MAXV], num;
int st[MAXV], top; bool inq[MAXV];
void Tarjan(int u)
{
    dfn[u] = low[u] = ++clk, st[++top] = u, inq[u] = 1;
    for (auto v : g[u])
    {
        if (!dfn[v]) Tarjan(v), low[u] = min(low[u], low[v]);
        else if (inq[v]) low[u] = min(low[u], dfn[v]);
    }
    if (dfn[u] == low[u])
    {
        ++num;
        while (st[top] != u) scc[st[top]] = num, inq[st[top]] = 0, top--;
        scc[u] = num, inq[u] = 0, top--;
    }
}

vector <int> tr[MAXV];
int vise[MAXV];

const int MAXB = 5002, B = 5000;
bitset <MAXB> to[2][MAXV];
bitset <MAXB> res[11][MAXN], avl[11];

int main()
{
    // freopen("A.in", "r", stdin);
    // freopen("A.out", "w", stdout);
    #if DEBUG
    #else
    ios::sync_with_stdio(0), cin.tie(0);
    #endif
    Read(t), Read(n), Read(m);
    for (int i = 1; i <= m; i++)
    {
        Read(e[i].op), Read(e[i].x), Read(e[i].u), Read(e[i].v);
        pt[e[i].u].push_back(e[i].x), pt[e[i].v].push_back(e[i].x + (e[i].op ^ 1));
    }
    for (int i = 1; i <= n; i++)
    {
        pt[i].push_back(t + 1);
        sort(pt[i].begin(), pt[i].end());
        int sz = unique(pt[i].begin(), pt[i].end()) - pt[i].begin();
        pt[i].resize(sz), vid[i].resize(sz);
        // cout << i << ' ' << sz << '\n';
        // for (auto x : pt[i]) cout << x << ' '; cout << '\n';
        int pre = 0;
        for (int j = 0; j < sz; j++)
        {
            vid[i][j] = ++vt, vt++;
            if (pre) g[vt - 1].push_back(pre), g[pre + 1].push_back(vt);
            pre = vt - 1;
        }
        // for (auto x : vid[i]) cout << x << ' '; cout << '\n';
    }
    for (int i = 1; i <= m; i++)
    {
        int l = lower_bound(pt[e[i].u].begin(), pt[e[i].u].end(), e[i].x) - pt[e[i].u].begin();
        int r = lower_bound(pt[e[i].v].begin(), pt[e[i].v].end(), e[i].x + (e[i].op ^ 1)) - pt[e[i].v].begin();
        l = vid[e[i].u][l], r = vid[e[i].v][r];
        // cout << l << ' ' << r << "\n";
        if (e[i].op) g[l].push_back(r + 1), g[r].push_back(l + 1);
        else g[l + 1].push_back(r + 1), g[r].push_back(l);
    }
    // for (int i = 1; i <= vt; i++)
    // {
    //     for (auto v : g[i]) cout << i << ' ' << v << "\n";
    // }
    for (int i = 1; i <= vt; i++)
        if (!dfn[i]) Tarjan(i);
    // for (int i = 1; i <= vt; i++) cout << scc[i] << ' '; cout << '\n';
    for (int i = 1; i <= vt; i++)
    {
        for (auto v : g[i])
            if (scc[i] != scc[v]) tr[scc[i]].push_back(scc[v]);
    }
    int D = (n - 1) / B + 1;
    for (int d = 1; d <= D; d++)
    {
        int l = (d - 1) * B + 1, r = min(n, d * B);
        for (int i = 1; i <= num; i++) to[0][i].reset(), to[1][i].reset();
        for (int i = l; i <= r; i++) to[0][scc[vid[i].back()]].set(i - l), to[1][scc[vid[i].back() + 1]].set(i - l);
        for (int i = 1; i <= num; i++)
        {
            for (auto v : tr[i])
                if (vise[v] != i)
                    to[0][i] |= to[0][v], to[1][i] |= to[1][v], vise[v] = i;
        }
        for (int i = 1; i <= n; i++)
        {
            if (ans[i] == -1) continue;
            int u = scc[vid[i].back()];
            if ((to[0][u] & to[1][u]).count()) ans[i] = -1;
            else ans[i] += to[0][u].count(), res[d][i] = to[1][u];
        }
    }
    int c0 = 0;
    for (int i = 1; i <= n; i++)
        if (ans[i] != -1) c0++, avl[(i - 1) / B + 1].set((i - 1) % B);
    for (int i = 1; i <= n; i++)
        if (ans[i] == -1) cout << "0 ";
        else
        {
            int c1 = 0;
            for (int d = 1; d <= D; d++) c1 += (avl[d] & res[d][i]).count();
            cout << c0 - c1 - 1 << ' ';
        }
    return 0;
}

詳細信息

Test #1:

score: 10
Accepted
time: 8ms
memory: 31412kb

input:

2 10 10
0 1 5 3
0 1 10 10
1 1 4 4
1 1 10 3
0 1 2 5
1 1 8 1
1 1 10 8
0 1 2 2
1 2 10 3
1 2 8 3

output:

7 8 6 0 8 8 8 5 8 6 

result:

ok 10 numbers

Test #2:

score: 10
Accepted
time: 9ms
memory: 32960kb

input:

100 100 200
1 98 31 73
0 75 20 71
1 61 95 74
1 33 42 5
0 70 67 67
1 46 27 80
1 80 70 62
0 34 25 97
1 58 7 43
1 23 26 10
0 8 86 59
0 85 51 41
1 8 54 72
0 7 59 29
0 8 31 9
0 92 88 3
0 34 31 50
1 63 85 90
0 85 66 69
0 32 45 71
1 47 21 21
0 58 2 16
0 14 17 84
1 32 12 10
0 11 40 31
0 70 85 67
0 36 35 84
...

output:

90 85 83 88 85 90 89 82 89 81 89 0 88 90 0 84 84 91 91 85 0 90 88 85 90 88 86 0 85 85 88 84 89 88 86 88 85 88 88 87 86 86 81 90 90 84 0 90 75 0 90 85 89 89 91 86 87 87 88 85 88 90 85 90 88 84 0 89 85 84 85 82 84 84 89 84 89 91 83 85 87 89 87 80 82 90 0 89 90 88 87 90 87 91 86 90 86 85 78 90 

result:

ok 100 numbers

Test #3:

score: 10
Accepted
time: 3ms
memory: 32780kb

input:

100 100 200
0 18 72 87
0 26 100 8
1 2 84 58
1 90 92 65
0 31 23 62
1 69 70 52
1 87 74 45
0 71 1 17
1 2 64 54
1 51 43 62
0 3 17 44
1 18 41 27
0 21 67 30
1 67 76 22
0 66 76 59
1 53 49 78
0 96 47 49
1 52 78 95
0 59 73 60
1 20 64 40
0 39 20 70
0 46 63 69
0 62 8 14
0 6 33 47
1 52 39 45
1 11 70 30
0 86 26 ...

output:

91 88 98 99 92 94 98 96 96 98 96 98 97 95 96 95 85 97 89 98 95 97 92 99 96 93 93 94 98 94 98 93 91 98 96 91 99 89 89 86 89 96 92 96 93 94 85 95 82 91 96 98 90 93 96 97 91 90 94 92 91 95 95 89 96 93 99 98 99 87 98 94 95 96 93 97 96 95 93 88 90 94 99 86 95 91 97 92 87 96 85 94 99 98 92 93 96 95 99 92 

result:

ok 100 numbers

Test #4:

score: 10
Accepted
time: 24ms
memory: 58376kb

input:

1000000 3000 6000
0 1 1 1860
0 1 2 51
0 1 3 61
0 1 4 2721
0 1 5 596
0 1 6 2173
0 1 7 974
0 1 8 1525
0 1 9 706
0 1 10 451
0 1 11 2075
0 1 12 812
0 1 13 1117
0 1 14 299
0 1 15 2099
0 1 16 1521
0 1 17 2285
0 1 18 375
0 1 19 2894
0 1 20 1208
0 1 21 614
0 1 22 924
0 1 23 1670
0 1 24 867
0 1 25 2291
0 1 2...

output:

1495 1495 1496 1496 1497 1498 1497 1497 1495 1497 1497 1498 1497 1497 1497 1495 1497 1496 1497 1496 1496 1496 1496 1496 1497 1495 1496 1498 1497 1498 1495 1497 1497 1496 1496 1496 1496 1497 1497 1498 1496 1497 1497 1497 1496 1497 1496 1496 1497 1496 1496 1497 1496 1496 1496 1496 1496 1498 1497 1496 ...

result:

ok 3000 numbers

Test #5:

score: 0
Wrong Answer
time: 81ms
memory: 142968kb

input:

40000 10000 20000
1 1 1 1
0 1 1 2
0 1 1 3
0 2 3 4
0 2 3 5
0 3 5 6
0 3 5 7
0 4 7 8
0 4 7 9
0 5 9 10
0 5 9 11
0 6 11 12
0 6 11 13
0 7 13 14
0 7 13 15
0 8 15 16
0 8 15 17
0 9 17 18
0 9 17 19
0 10 19 20
0 10 19 21
0 11 21 22
0 11 21 23
0 12 23 24
0 12 23 25
0 13 25 26
0 13 25 27
0 14 27 28
0 14 27 29
0 ...

output:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

result:

wrong answer 5001st numbers differ - expected: '0', found: '4999'

Test #6:

score: 0
Wrong Answer
time: 115ms
memory: 163612kb

input:

40000 10000 20000
0 39999 2589 1050
1 39998 2589 983
0 39999 4308 9484
1 39998 4308 2423
0 39999 7924 4021
1 39998 7924 5520
0 39999 8340 2926
1 39998 8340 5694
0 39999 4146 8898
1 39998 4146 8588
0 39999 3838 2397
1 39998 3838 4545
0 39996 9766 4308
1 39995 9766 6570
0 39996 4764 8340
1 39995 4764 ...

output:

8935 8934 0 0 8935 8934 0 0 8929 8935 8929 8935 8933 8934 8920 0 8935 8931 8931 0 0 8935 8935 8927 8933 8925 8932 8887 8932 8933 8934 8934 8924 0 8921 8924 0 0 0 8935 8934 8934 8928 0 8910 8924 8935 8922 0 8930 8934 0 8929 0 8935 8934 0 8932 0 8930 8929 8933 8931 8929 0 8932 8929 8934 8934 8934 8926...

result:

wrong answer 1st numbers differ - expected: '7771', found: '8935'

Test #7:

score: 0
Wrong Answer
time: 849ms
memory: 504980kb

input:

1000000 30000 60000
0 999999 18959 18261
1 999998 18959 19279
0 999996 6700 18959
1 999995 6700 2151
0 999996 19778 18959
1 999995 19778 12268
0 999993 8449 6700
1 999992 8449 29787
0 999993 14350 6700
1 999992 14350 21702
0 999993 9759 6700
1 999992 9759 23907
0 999990 18560 9759
1 999989 18560 227...

output:

28900 28903 0 0 28901 0 28902 28902 28903 28900 28902 28902 28903 28901 28901 28900 28903 28894 28900 28900 28902 28903 28903 0 28902 28903 28903 28903 28899 0 28901 28901 28902 0 28903 28902 0 28903 28903 0 28903 28902 28902 28901 28903 28902 28903 28903 28902 28902 0 0 0 28901 0 28903 28899 28901 ...

result:

wrong answer 1st numbers differ - expected: '23311', found: '28900'

Test #8:

score: 0
Wrong Answer
time: 1229ms
memory: 626252kb

input:

1000000 40000 80000
1 1 1 1
0 1 1 2
0 1 1 3
0 2 3 4
0 2 3 5
0 3 5 6
0 3 5 7
0 4 7 8
0 4 7 9
0 5 9 10
0 5 9 11
0 6 11 12
0 6 11 13
0 7 13 14
0 7 13 15
0 8 15 16
0 8 15 17
0 9 17 18
0 9 17 19
0 10 19 20
0 10 19 21
0 11 21 22
0 11 21 23
0 12 23 24
0 12 23 25
0 13 25 26
0 13 25 27
0 14 27 28
0 14 27 29
...

output:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

result:

wrong answer 5001st numbers differ - expected: '0', found: '34999'

Test #9:

score: 0
Time Limit Exceeded

input:

1000000 50000 100000
0 999999 18845 16698
1 999998 18845 7793
0 999999 30202 25942
1 999998 30202 39321
0 999999 10014 42307
1 999998 10014 16269
0 999999 5779 8262
1 999998 5779 48787
0 999996 38679 5779
1 999995 38679 17636
0 999996 33436 5779
1 999995 33436 7042
0 999996 11608 5779
1 999995 11608...

output:


result:


Test #10:

score: 0
Wrong Answer
time: 1944ms
memory: 801412kb

input:

1000000 50000 100000
0 1 1 41380
0 1 2 36609
0 1 3 25332
0 1 4 39173
0 1 5 37591
0 1 6 49880
0 1 7 33261
0 1 8 29353
0 1 9 33900
0 1 10 3182
0 1 11 38944
0 1 12 8610
0 1 13 4518
0 1 14 21812
0 1 15 325
0 1 16 47816
0 1 17 21494
0 1 18 14930
0 1 19 2669
0 1 20 46226
0 1 21 17334
0 1 22 1388
0 1 23 29...

output:

49999 49999 49998 49999 49999 49999 49999 49999 49999 49998 49999 49999 49999 49998 49999 49999 49998 49999 49999 49999 49999 49999 49999 49999 49999 49999 49999 49999 49999 49999 49999 49999 49999 49999 49998 49998 49997 49998 49999 49999 49998 49998 49999 49999 49998 49999 49998 49999 49999 49999 ...

result:

wrong answer 1st numbers differ - expected: '24998', found: '49999'