• hdu 5443 The Water Problem


    题目连接

    http://acm.hdu.edu.cn/showproblem.php?pid=5443  

    The Water Problem

    Description

    In Land waterless, water is a very limited resource. People always fight for the biggest source of water. Given a sequence of water sources with $a_1, a_2, a_3, . . . , a_n$ representing the size of the water source. Given a set of queries each containing $2$ integers $l$ and $r$, please find out the biggest water source between $a_l$ and $a_r$.

    Input

    First you are given an integer $T (T leq 10)$ indicating the number of test cases. For each test case, there is a number $n (0 leq n leq 1000)$ on a line representing the number of water sources. n integers follow, respectively $a_1, a_2, a_3, . . . , a_n,$ and each integer is in ${1, . . . , 10^6}$. On the next line, there is a number $q (0 leq q leq 1000)$ representing the number of queries. After that, there will be $q$ lines with two integers $l$ and $r (1 leq l leq r leq n)$ indicating the range of which you should find out the biggest water source.

    Output

    For each query, output an integer representing the size of the biggest water source.

    Sample Input

    3
    1
    100
    1
    1 1
    5
    1 2 3 4 5
    5
    1 2
    1 3
    2 4
    3 4
    3 5
    3
    1 999999 1
    4
    1 1
    1 2
    2 3
    3 3

    Sample Output

    100
    2
    3
    4
    4
    5
    1
    999999
    999999
    1

    裸的rmq问题,st表水之。。

    #include<algorithm>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<cstdio>
    #include<vector>
    #include<queue>
    #include<set>
    using std::max;
    using std::sort;
    using std::pair;
    using std::swap;
    using std::queue;
    using std::multiset;
    #define pb(e) push_back(e)
    #define sz(c) (int)(c).size()
    #define mp(a, b) make_pair(a, b)
    #define all(c) (c).begin(), (c).end()
    #define iter(c) decltype((c).begin())
    #define cls(arr, val) memset(arr, val, sizeof(arr))
    #define cpresent(c, e) (find(all(c), (e)) != (c).end())
    #define rep(i, n) for(int i = 0; i < (int)n; i++)
    #define tr(c, i) for(iter(c) i = (c).begin(); i != (c).end(); ++i)
    const int N = 1010;
    const int INF = 0x3f3f3f3f;
    typedef unsigned long long ull;
    int n, arr[N], st[N + 5][11];
    struct SparseTable {
    	inline void init() {
    		rep(i, n) st[i][0] = arr[i];
    		for (int j = 1; (1 << j) <= n; j++) {
    			for (int i = 0; i + (1 << j) <= n; i++) {
    				st[i][j] = max(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
    			}
    		}
    	}
    	inline int rmq(int a, int b) {
    		int k = __builtin_clz((int)1) - __builtin_clz(b - a + 1);
    		return max(st[a][k], st[b - (1 << k) + 1][k]);
    	}
    }go;
    int main() {
    #ifdef LOCAL
    	freopen("in.txt", "r", stdin);
    	freopen("out.txt", "w+", stdout);
    #endif
    	int t, a, b, q;
    	scanf("%d", &t);
    	while(t--) {
    		scanf("%d", &n);
    		rep(i, n) scanf("%d", &arr[i]);
            go.init();
            scanf("%d", &q);
            while(q--) {
    			scanf("%d %d", &a, &b);
    			printf("%d
    ", go.rmq(a - 1, b - 1));
            }
    	}
    	return 0;
    }
  • 相关阅读:
    python 远程 部署和运行
    学习笔记——UML类图
    Core Data 多线程操作实战篇
    Core Data系列六——Custom Migration
    Core Data系列五——数据迁移方案
    NSOperation以及NSOperationQueue的使用
    Magical Record设计小谈
    Core Data系列四——多线程设计
    Core Data系列三——基本使用
    Core Data系列二——基础概念
  • 原文地址:https://www.cnblogs.com/GadyPu/p/4814497.html
Copyright © 2020-2023  润新知