Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
这样改完为什么就错了?我用的线段树,存储用的数组 struct node { int v;//结点的值 int c;//存储在此结点子孙的star个数;函数更改后表示小与等于此结点的v的结点个数 int l,r;//左右子树指针 }tree[32002]; 主函数中函数调用语句: scanf("%d",&n); for (i = 0; i < n; i++) { scanf("%d %d",&x,&y); res[count(Root,x)]++; //计算小与x的结点个数 insert(x); //插入结点,值为x } 可以AC的函数: int count(int root, int x) { if (tree[root].v == x) return tree[root].c - tree[tree[root].r].c; //* else if (tree[root].v < x) return tree[root].c - tree[tree[root].r].c + count(tree[root].r,x); //* else //tree[r].v > x return count(tree[root].l,x); } void insert(int x) { int p = Root; while (x != tree[p].v) { tree[p].c++; //* if (x < tree[p].v) p = tree[p].l; else p = tree[p].r; } tree[p].c++; } 更改后WA的函数:(标*的语句是修改的位置) int count(int root, int x) { if (tree[root].v == x) return tree[root].c; //* else if (tree[root].v < x) return tree[root].c + count(tree[root].r,x); //* else //tree[r].v > x return count(tree[root].l,x); } void insert(int x) { int p = Root; while (x != tree[p].v) { if (x < tree[p].v) { tree[p].c++; //* p = tree[p].l; } else p = tree[p].r; } tree[p].c++; } 想不明白为什么改完了就错了,请路过的帮我看一下,谢谢~~~ Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator