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 |
有木有大佬帮忙看看树状数组做的,为啥wa咧#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> #include<cmath> #define INF 0x3f3f3f #define MAX 50005 using namespace std; int lowbit[50005],build_min[50005],build_max[50005],n,a[50005]; void GetLow() { for(int i = 1; i <= n; i++) lowbit[i] = i&(-i); } void TreeBuild() { for(int i = 1; i <= n; i++) { build_max[i] = 0; build_min[i] = 9999999; for(int j = i; j > i-lowbit[i]; j--) { build_max[i] = max(build_max[i],a[j]); build_min[i] = min(build_min[i],a[j]); } } } int query_max(int x,int y) { int ans = a[y]; while(y != x) { for(y -= 1; y - lowbit[y] > x; y -= lowbit[y]) ans = max(ans,build_max[y]); ans = max(ans,a[y]); } return ans; } int query_min(int x,int y) { int ans = a[y]; while(y != x) { for(y -= 1; y - lowbit[y] > x; y -= lowbit[y]) ans = min(ans,build_max[y]); ans = min(ans,a[y]); } return ans; } int main() { int m; while(~scanf("%d%d",&n,&m)) { GetLow(); for(int i = 1; i <= n; i++) scanf("%d",&a[i]); TreeBuild(); while(m--) { int a,b; scanf("%d%d",&a,&b); if(a == b) cout << 0 << endl; else cout << query_max(a,b) - query_min(a,b) << endl; } } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator