F.A.Q
Hand In Hand
Online Acmers
Problem Archive
Realtime Judge Status
Authors Ranklist
 
     C/C++/Java Exams     
ACM Steps
Go to Job
Contest LiveCast
ICPC@China
Best Coder beta
VIP | STD Contests
    DIY | Web-DIY beta
Author ID 
Password 
 Register new ID

View Compilation Error

0_0_20614593_6185.cpp:6:6: error: 'T' does not name a type
      T[20];void build(int L, int R, int dep){    T[dep].push_back(Seg(L, R, 0));    if (L != R)    {        int mid = L + R >> 1;        build(L, mid, dep + 1);        build(mid + 1, R, dep + 1);    }}int ch[4000000][2];int num[4000000];int cnt;void insert_Dic(int root, int x){    num[root]++;    for (int i = 30; i >= 0; i--)    {        int c = (x&(1 << i)) ? 1 : 0;        if (!ch[root][c]) ch[root][c] = ++cnt;        root = ch[root][c];        num[root]++;    }}void erase_Dic(int root, int x){    num[root]--;    for (int i = 30; i >= 0; i--)    {        int c = (x&(1 << i)) ? 1 : 0;        root = ch[root][c];        num[root]--;    }}int find_Dic(int root, int x){    int res = 0;    for (int i = 30; i >= 0; i--)    {        int c = (x&(1 << i)) ? 1 : 0;        if (ch[root][c ^ 1] && num[ch[root][c ^ 1]])        {            res |= 1 << i;            root = ch[root][c ^ 1];        }        else root = ch[root][c];    }    return res;}vector<Seg> Q;void Select(int L, int R, int l, int r, int dep, int deep){    if (dep > deep) return;    if (l <= L&&R <= r)    {        if(dep==deep)            Q.push_back(Seg(L, R, 0));    }    else    {        int mid = L + R >> 1;        if (l <= mid) Select(L, mid, l, r, dep + 1, deep);        if (mid < r) Select(mid + 1, R, l, r, dep + 1, deep);    }}struct EDGE{    int to, next;    EDGE() {}    EDGE(int _t, int _n) { to = _t, next = _n; }}edge[maxn];int head[maxn], edgecnt;void init_edge(){    memset(head, -1, sizeof(head));    edgecnt = 0;}void add(int s, int t){    edge[edgecnt] = EDGE(t, head[s]);    head[s] = edgecnt++;}int dfs_clk;int Left[maxn], Right[maxn];void dfs(int u){    Left[u] = ++dfs_clk;    for (int i = head[u]; ~i; i = edge[i].next)        dfs(edge[i].to);    Right[u] = dfs_clk;}int val[maxn], _val[maxn];int ans[maxn];int bin(int idx, int x){    int L = 0, R = T[idx].size();    while (L < R)    {        int mid = (L + R) >> 1;        if (T[idx][mid].l <= x) L = mid + 1;        else R = mid;    }    return L - 1;}int main(){    int Ts;    scanf("%d", &Ts);    while (Ts--)    {        init_edge();        int n, m;        scanf("%d %d", &n, &m);        for (int i = 2; i <= n; i++)        {            int fa;            scanf("%d", &fa);            add(fa, i);        }        dfs_clk = 0;        dfs(1);        for (int i = 1; i <= n; i++) scanf("%d", &val[i]);        int Qc = 0;        for (int i = 1; i <= m; i++)        {            scanf("%d %d", &op[i].op, &op[i].id);            if (op[i].op == 0) scanf("%d", &op[i].x);            else Qc++;        }        for (int i = 0; i < 20; i++) T[i].clear();        build(1, dfs_clk, 0);        memset(ans, 0, sizeof(ans));        for (int i = 19; i >= 0; i--)            if (T[i].size())            {                int Tsize = T[i].size();                memcpy(_val, val, sizeof(_val));                memset(ch, 0, sizeof(ch));                memset(num, 0, sizeof(num));                cnt = 0;                for (int j = 0; j < Tsize; j++) T[i][j].root = ++cnt;                for (int j = 1; j <= n; j++)                {                    Q.clear();                    Select(1, dfs_clk, Left[j], Right[j], 0, i);                    for (int k = 0; k < Q.size(); k++)                    {                        int pos = bin(i, Q[k].l);                        insert_Dic(T[i][pos].root, _val[j]);                    }                }                int quecnt = 0;                for (int j = 1; j <= m;j++)                    if (op[j].op == 0)                    {                        Q.clear();                        Select(1, dfs_clk, Left[op[j].id], Right[op[j].id], 0, i);                        for (int k = 0; k < Q.size(); k++)                        {                            int pos = bin(i, Q[k].l);                            erase_Dic(T[i][pos].root, _val[op[j].id]);                            insert_Dic(T[i][pos].root, op[j].x);                        }                        _val[op[j].id] = op[j].x;                    }                    else                    {                        quecnt++;                        int pos = bin(i, Left[op[j].id]);                        if (pos >= 0 && T[i][pos].l <= Left[op[j].id] && Left[op[j].id] <= T[i][pos].r)                        {                            ans[quecnt] = max(ans[quecnt], find_Dic(T[i][pos].root, _val[op[j].id]));                        }                    }            }        for (int i = 1; i <= Qc; i++) printf("%d\n", ans[i]);    }    return 0;}
      ^
0_0_20614593_6185.cpp: In function 'void build(int, int, int)':
0_0_20614593_6185.cpp:6:50: error: 'T' was not declared in this scope
      T[20];void build(int L, int R, int dep){    T[dep].push_back(Seg(L, R, 0));    if (L != R)    {        int mid = L + R >> 1;        build(L, mid, dep + 1);        build(mid + 1, R, dep + 1);    }}int ch[4000000][2];int num[4000000];int cnt;void insert_Dic(int root, int x){    num[root]++;    for (int i = 30; i >= 0; i--)    {        int c = (x&(1 << i)) ? 1 : 0;        if (!ch[root][c]) ch[root][c] = ++cnt;        root = ch[root][c];        num[root]++;    }}void erase_Dic(int root, int x){    num[root]--;    for (int i = 30; i >= 0; i--)    {        int c = (x&(1 << i)) ? 1 : 0;        root = ch[root][c];        num[root]--;    }}int find_Dic(int root, int x){    int res = 0;    for (int i = 30; i >= 0; i--)    {        int c = (x&(1 << i)) ? 1 : 0;        if (ch[root][c ^ 1] && num[ch[root][c ^ 1]])        {            res |= 1 << i;            root = ch[root][c ^ 1];        }        else root = ch[root][c];    }    return res;}vector<Seg> Q;void Select(int L, int R, int l, int r, int dep, int deep){    if (dep > deep) return;    if (l <= L&&R <= r)    {        if(dep==deep)            Q.push_back(Seg(L, R, 0));    }    else    {        int mid = L + R >> 1;        if (l <= mid) Select(L, mid, l, r, dep + 1, deep);        if (mid < r) Select(mid + 1, R, l, r, dep + 1, deep);    }}struct EDGE{    int to, next;    EDGE() {}    EDGE(int _t, int _n) { to = _t, next = _n; }}edge[maxn];int head[maxn], edgecnt;void init_edge(){    memset(head, -1, sizeof(head));    edgecnt = 0;}void add(int s, int t){    edge[edgecnt] = EDGE(t, head[s]);    head[s] = edgecnt++;}int dfs_clk;int Left[maxn], Right[maxn];void dfs(int u){    Left[u] = ++dfs_clk;    for (int i = head[u]; ~i; i = edge[i].next)        dfs(edge[i].to);    Right[u] = dfs_clk;}int val[maxn], _val[maxn];int ans[maxn];int bin(int idx, int x){    int L = 0, R = T[idx].size();    while (L < R)    {        int mid = (L + R) >> 1;        if (T[idx][mid].l <= x) L = mid + 1;        else R = mid;    }    return L - 1;}int main(){    int Ts;    scanf("%d", &Ts);    while (Ts--)    {        init_edge();        int n, m;        scanf("%d %d", &n, &m);        for (int i = 2; i <= n; i++)        {            int fa;            scanf("%d", &fa);            add(fa, i);        }        dfs_clk = 0;        dfs(1);        for (int i = 1; i <= n; i++) scanf("%d", &val[i]);        int Qc = 0;        for (int i = 1; i <= m; i++)        {            scanf("%d %d", &op[i].op, &op[i].id);            if (op[i].op == 0) scanf("%d", &op[i].x);            else Qc++;        }        for (int i = 0; i < 20; i++) T[i].clear();        build(1, dfs_clk, 0);        memset(ans, 0, sizeof(ans));        for (int i = 19; i >= 0; i--)            if (T[i].size())            {                int Tsize = T[i].size();                memcpy(_val, val, sizeof(_val));                memset(ch, 0, sizeof(ch));                memset(num, 0, sizeof(num));                cnt = 0;                for (int j = 0; j < Tsize; j++) T[i][j].root = ++cnt;                for (int j = 1; j <= n; j++)                {                    Q.clear();                    Select(1, dfs_clk, Left[j], Right[j], 0, i);                    for (int k = 0; k < Q.size(); k++)                    {                        int pos = bin(i, Q[k].l);                        insert_Dic(T[i][pos].root, _val[j]);                    }                }                int quecnt = 0;                for (int j = 1; j <= m;j++)                    if (op[j].op == 0)                    {                        Q.clear();                        Select(1, dfs_clk, Left[op[j].id], Right[op[j].id], 0, i);                        for (int k = 0; k < Q.size(); k++)                        {                            int pos = bin(i, Q[k].l);                            erase_Dic(T[i][pos].root, _val[op[j].id]);                            insert_Dic(T[i][pos].root, op[j].x);                        }                        _val[op[j].id] = op[j].x;                    }                    else                    {                        quecnt++;                        int pos = bin(i, Left[op[j].id]);                        if (pos >= 0 && T[i][pos].l <= Left[op[j].id] && Left[op[j].id] <= T[i][pos].r)                        {                            ans[quecnt] = max(ans[quecnt], find_Dic(T[i][pos].root, _val[op[j].id]));                        }                    }            }        for (int i = 1; i <= Qc; i++) printf("%d\n", ans[i]);    }    return 0;}
                                                  ^
0_0_20614593_6185.cpp:6:78: error: 'Seg' was not declared in this scope
      T[20];void build(int L, int R, int dep){    T[dep].push_back(Seg(L, R, 0));    if (L != R)    {        int mid = L + R >> 1;        build(L, mid, dep + 1);        build(mid + 1, R, dep + 1);    }}int ch[4000000][2];int num[4000000];int cnt;void insert_Dic(int root, int x){    num[root]++;    for (int i = 30; i >= 0; i--)    {        int c = (x&(1 << i)) ? 1 : 0;        if (!ch[root][c]) ch[root][c] = ++cnt;        root = ch[root][c];        num[root]++;    }}void erase_Dic(int root, int x){    num[root]--;    for (int i = 30; i >= 0; i--)    {        int c = (x&(1 << i)) ? 1 : 0;        root = ch[root][c];        num[root]--;    }}int find_Dic(int root, int x){    int res = 0;    for (int i = 30; i >= 0; i--)    {        int c = (x&(1 << i)) ? 1 : 0;        if (ch[root][c ^ 1] && num[ch[root][c ^ 1]])        {            res |= 1 << i;            ro


Hangzhou Dianzi University Online Judge 3.0
Copyright © 2005-2024 HDU ACM Team. All Rights Reserved.
Designer & Developer : Wang Rongtao LinLe GaoJie GanLu
Total 0.000000(s) query 1, Server time : 2024-09-29 05:28:17, Gzip enabled