题目链接:http://poj.org/problem?id=3264
解题思路:
线段树维护一个区间的最大值,最小值,初始分别赋值为很小的负数,很大的正数
代码版本1:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define lson rt<<1,l,m
#define rson rt<<1|1,m+1,r
#define mid int m = l+r>>1
#define tl tree[rt<<1]
#define tr tree[rt<<1|1]
#define inf 0x3f3f3f3f
using namespace std;
const int N = 5e4+5;
struct node
{
int minn,maxx;
node(){minn=inf;maxx=-inf;}
}tree[N<<2];
node cmp(node a,node b)
{
node temp;
temp.maxx = max(a.maxx,b.maxx);
temp.minn = min(a.minn,b.minn);
return temp;
}
void push_up(int rt)
{
tree[rt].maxx = max(tl.maxx,tr.maxx);
tree[rt].minn = min(tl.minn,t