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 |
Re:WA 请大大指点一下阿!谢谢In Reply To:WA 请大大指点一下阿!谢谢 Posted by:y_zou at 2006-03-27 16:04:42 > /* > PKU 2777 > Algorithm: LineTree > */ > > #include <iostream> > #include <sstream> > #include <string> > > using namespace std; > > class LineTree > { > public: > int color; > int left, right, mid; > LineTree *lChild, *rChild; > LineTree(int, int); > void SetColor(int, int, int); > int CountColor(int, int); > }; > > LineTree::LineTree(int l, int r) > { > left = l; > right = r; > mid = (l + r) >> 1; > color = 1; > if (left + 1 != right) > { > lChild = new LineTree(left, mid); > rChild = new LineTree(mid, right); > } > } > > void LineTree::SetColor(int first, int last, int c) > { > if (first == last) > { > color = 1; > return ; > } > if (left == first && right == last) > { > color = 0; > color |= 1 << c; > return; > } > else > { > //color |= 1 << c; > if (first >= mid) > { > rChild->SetColor(first, last, c); > } > else if (last <= mid) > { > lChild->SetColor(first, last, c); > } > else if (first <= mid && last >= mid) > { > lChild->SetColor(first, mid, c); > rChild->SetColor(mid, last, c); > } > > color = lChild->color | rChild->color; > } > return ; > } > > int LineTree::CountColor(int first, int last) > { > if (first == left && last == right) > { > return color; > } > else if (first >= mid) > { > return rChild->CountColor(first, last); > } > else if (last <= mid) > { > return lChild->CountColor(first, last); > } > else if (first <= mid && last >= mid) > { > return lChild->CountColor(first, mid) | rChild->CountColor(mid, last); > } > return color; > } > > int main() > { > int length, color, op; > int i; > int first, last, cnum; > char cmd; > int tmp, j; > cin >> length >> cnum >> op; > { > LineTree *Tree = new LineTree(0, length); > for (i = 0; i < op; i++) > { > cin >> cmd; > if (cmd == 'C') > { > cin >> first >> last >> color; > Tree->SetColor(first-1, last, color); > } > else if (cmd == 'P') > { > cin >> first >> last; > int ans = 0; > tmp = Tree->CountColor(first-1, last); > for (j = 0; j <= cnum; j++) > { > if (tmp & 1) > ans++; > tmp = tmp >> 1; > } > printf("%d\n", ans); > } > } > delete Tree; > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator