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:我用线段树,为什么会超时呢?是不是进入死循环了?In Reply To:我用线段树,为什么会超时呢?是不是进入死循环了? Posted by:elendtest at 2010-02-06 13:09:59 太暴力了,优化一下 > #include <stdio.h> > > #define MAXN 410000 > > struct Node > { > __int64 sum ; > int begin, end ; > Node () {sum = 0 ; begin = end = 0 ;} > } tree[MAXN] ; > > > void Build (int subroot, int b, int e) > { > tree[subroot].begin = b ; > tree[subroot].end = e ; > if (b < e) > { > int mid = (b + e) / 2 ; > Build (2 * subroot, b, mid) ; > Build (2 * subroot + 1, mid + 1, e) ; > } > } > > void Insert (int subroot, int b, int e, int value) > { > > tree[subroot].sum += value * (e - b + 1) ; > if (tree[subroot].begin < tree[subroot].end) > { > int mid = (tree[subroot].begin + tree[subroot].end) / 2 ; > if (e <= mid) Insert (2 * subroot, b, e, value) ; > else if (b > mid) Insert (2 * subroot + 1, b, e, value) ; > else > { > Insert (2 * subroot, b, mid, value) ; > Insert (2 * subroot + 1, mid + 1, e, value) ; > } > } > } > > __int64 Query (int subroot, int b, int e) > { > if (tree[subroot].begin == b && tree[subroot].end == e) > return tree[subroot].sum ; > else > { > int mid = (tree[subroot].begin + tree[subroot].end) / 2 ; > if (e <= mid) return Query (2 * subroot, b, e) ; > else if (b > mid) return Query (2 * subroot + 1, b, e) ; > else > return Query (2 * subroot, b, mid) + Query (2 * subroot + 1, mid + 1, e) ; > } > } > > int main () > { > int N, Q, a, b, c, i, temp ; > int root = 1 ; > char choice[10] ; ; > > scanf ("%d%d", &N, &Q) ; > Build (root, 1, N) ; > > for (i = 1 ; i <= N ; i++) > { > scanf ("%d", &temp) ; > Insert (root, i, i, temp) ; > } > > while (Q--) > { > getchar () ; > scanf ("%s", choice) ; > if (choice[0] == 'Q') > { > scanf ("%d%d", &a, &b) ; > printf ("%I64d\n", Query (root, a, b)) ; > } > else > { > scanf ("%d%d%d", &a, &b, &c) ; > Insert (root, a, b, c) ; > } > } > > return 0 ; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator