LightOJ 1082 - Array Queries【线段树最值】

原创 2015年10月10日 18:28:45

题目链接:
http://www.lightoj.com/volume_showproblem.php?problem=1082

一水~

代码:

#include <stdio.h>
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <vector>

#define Mid(a,b) ( a+((b-a)>>1))
#define ll(x) (x<<1)
#define rr(x) (x<<1|1)

const int N = 1001000;

using namespace std;

int t, n, m;

int a[N];

struct node
{
    int left;
    int right;
    int sum;
    int mid() { return Mid(left, right); }
};

struct segtree
{
    node tree[N * 4];

    void buildtree(int left, int right, int ind)
    {
        tree[ind].left = left;
        tree[ind].right = right;
        tree[ind].sum = 0;

        if (left == right)
            tree[ind].sum = a[left];
        else
        {
            int mid = tree[ind].mid();
            buildtree(left, mid, ll(ind));
            buildtree(mid + 1, right, rr(ind));
            tree[ind].sum = min(tree[ll(ind)].sum, tree[rr(ind)].sum);
        }
    }

    int query(int st, int ed, int ind)
    {
        int left = tree[ind].left;
        int right = tree[ind].right;

        if (st <= left && right <= ed)
            return tree[ind].sum;
        else
        {
            int mid = tree[ind].mid();
            int ans = 1e6;
            if (st <= mid)
                ans = min(query(st, ed, ll(ind)),ans);
            if (ed > mid)
                ans = min(ans,query(st, ed, rr(ind)));
            return ans;
        }
    }
}seg;

int main()
{
    int t,cases=1;
    scanf("%d",&t);
    while (t--)
    {
        printf("Case %d:\n",cases++);
        scanf("%d %d", &n, &m);
        memset(a,0,sizeof(a));
        for (int i = 1; i <= n; i++)
        {
            scanf("%d", &a[i]);
        }
        seg.buildtree(1, n, 1);
        for(int i=0;i<m;i++)
        {
            int c, d;
            scanf("%d %d", &c, &d);
            printf("%d\n", seg.query(c, d, 1));
        }
    }
    return 0;
}
版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/49027647

lightOJ 1082 Array Queries

模板水题,套模板。。。 #include #include const int MAX = 1e5 + 5; int arr[5 * MAX]; int num; void update(i...
  • MrSiz
  • MrSiz
  • 2016-03-10 00:30:55
  • 286

lightOJ 1082 - Array Queries 【线段树(求最小值)】

1082 - Array Queries PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limi...
  • dxx_111
  • dxx_111
  • 2015-11-15 22:16:08
  • 262

LightOJ Array Queries 1082【线段树求区间最值】

1082 - Array Queries PDF (English) Statistics Forum Time Limit: 3 se...
  • ydd97
  • ydd97
  • 2015-08-20 22:00:02
  • 1097

LightOJ 1082 Array Queries RMQ

题目:http://www.lightoj.com/volume_showproblem.php?problem=1082 题意:给定一个数组,查询给定区间内的最小值 思路:RMQ模板题 #in...
  • discreeter
  • discreeter
  • 2016-07-27 10:20:46
  • 225

LightOJ - 1082 Array Queries(RMQ)

题目大意:给你N个数字,Q个询问,询问的是一个区间的最小值解题思路:RMQ裸题#include #include #include using namespace std; const int ...
  • L123012013048
  • L123012013048
  • 2015-11-06 22:42:39
  • 289

【codevs 1082】线段树练习3

#include #include #include #define ll long long using namespace std; int a[200000],n,Q; struct ed...
  • qq_33583069
  • qq_33583069
  • 2016-04-04 08:33:40
  • 294

LightOJ 1369 - Answering Queries(规律)

1369 - Answering Queries PDF (English) Statistics Forum Time...
  • zwj1452267376
  • zwj1452267376
  • 2015-11-11 18:33:47
  • 563

UOJ 164 线段树历史最值

164. 【清华集训2015】V描述 提交 自定义测试 Picks博士观察完金星凌日后,设计了一个复杂的电阻器。为了简化题目,题目中的常数与现实世界有所不同。这个电阻器内有编号为 1∼n1∼n 的 n...
  • miaomiao_ymxl
  • miaomiao_ymxl
  • 2017-01-16 21:38:13
  • 440

UOJ164 V 线段树lazytag维护历史最值

题意:维护一列数,支持: 1.区间加A 2.区间减A,减法结束后每个位置与0取max 3.区间覆盖成A 4.询问单点当前值 5.询问单点历史最值线段树lazytag维护历史最值,要记录四个数...
  • Frods
  • Frods
  • 2017-01-15 20:10:16
  • 489

【Codevs】1082 线段树练习 3 && 线段树模板

线段树模板……
  • LOI_QER
  • LOI_QER
  • 2016-05-08 10:05:11
  • 338
收藏助手
不良信息举报
您举报文章:LightOJ 1082 - Array Queries【线段树最值】
举报原因:
原因补充:

(最多只允许输入30个字)