栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3264 Balanced Lineup

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3264 Balanced Lineup

#include <iostream>#include <algorithm>#include <numeric>using namespace std;const    int        maxn = 50002;struct cnode{    int        l, r, nmin, nmax;    cnode    *pleft, *pright;};int        ncount, cow[maxn], n, q, ansmax, ansmin;cnode    tree[maxn * 2];void init(){    scanf("%d%d",&n,&q);    ncount = 0;}void buildtree(cnode *pnow, int start, int end){    int        mid;    pnow -> l = start;    pnow -> r = end;    pnow -> nmin = 1000001;    pnow -> nmax = -1;    mid = (start + end) / 2;    if (start != end)    {        ncount++;        pnow -> pleft = tree + ncount;        ncount++;        pnow -> pright = tree + ncount;        buildtree(pnow -> pleft, start, mid);        buildtree(pnow -> pright, mid + 1, end);    }}void insert(cnode *proot, int i, int v){    int        mid;    if (proot -> l == i && proot -> r == i)    {        proot -> nmin = v;        proot -> nmax = v;        return;    }    proot -> nmin = _cpp_min(v, proot -> nmin);    proot -> nmax = _cpp_max(v, proot -> nmax);    mid = (proot -> l + proot -> r) / 2;    if (i <= mid)        insert(proot -> pleft, i, v);    else        insert(proot -> pright, i, v);}void query(cnode *proot, int start, int end){    int        mid;    if (proot -> l == start && proot -> r == end)    {        ansmin = _cpp_min(proot -> nmin, ansmin); ansmax = _cpp_max(proot -> nmax, ansmax);        return;    }    mid = (proot -> l + proot -> r) / 2;    if (end <= mid)        query(proot -> pleft, start, end);    else if (start > mid)        query(proot -> pright, start, end);    else    {        query(proot -> pleft, start, mid);        query(proot -> pright, mid + 1, end);    }}int main(){    int        i, t, u;    init();    buildtree(tree, 0, n - 1);    for (i = 0; i < n; i++)    {        scanf("%d", &t);        insert(tree, i, t);    }    for (i = 0; i < q; i++)    {        ansmin = 1000001;        ansmax = -1;        scanf("%d%d", &t, &u);        query(tree, t - 1, u - 1);        cout << ansmax - ansmin << endl;    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375856.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号