| ||||||||||
| 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 | |||||||||
Re:水题,1A,附代码In Reply To:水题,1A,附代码 Posted by:bryant03 at 2014-09-26 20:54:03 > #include <cstdio>
> #include <algorithm>
> #include <cstring>
> using namespace std;
> int m_ax, m_in;
> int a[50010];
> struct node
> {
> int l, r, m_ax, m_in;
> }tree[200000];
> void build(int n, int l, int r)
> {
> tree[n].l = l;
> tree[n].r = r;
> if (l == r)
> {
> tree[n].m_ax = a[l];
> tree[n].m_in = a[l];
> return;
> }
> int mid = (l + r) / 2;
> build(n * 2, l, mid);
> build(n * 2 + 1, mid + 1, r);
> tree[n].m_ax = max(tree[n * 2].m_ax, tree[n * 2 + 1].m_ax);
> tree[n].m_in = min(tree[n * 2].m_in, tree[n * 2 + 1].m_in);
> }
>
> void query(int n, int l, int r)
> {
> if (tree[n].l == l&&tree[n].r == r)
> {
> m_ax = max(m_ax, tree[n].m_ax);
> m_in = min(m_in, tree[n].m_in);
> return;
> }
> int mid = (tree[n].l + tree[n].r) / 2;
> if (r <= mid)
> {
> query(n * 2, l, r);
> }
> else if (l > mid)
> {
> query(n * 2 + 1, l, r);
> }
> else
> {
> query(n * 2, l, mid);
> query(n * 2 + 1, mid + 1, r);
> }
> }
>
> int main()
> {
> int n, q, s, b;
> while (~scanf("%d%d", &n, &q))
> {
> memset(a, 0, sizeof(a));
> memset(tree, 0, sizeof(tree));
> for (int i = 1; i <= n; i++)
> scanf("%d", &a[i]);
> build(1, 1, n);
> /* for (int i = 1; i <= 20; i++)
> {
> m_ax = 0;
> m_in = 1000000;
> printf_s("%d %d %d %d\n", tree[i].l, tree[i].r, tree[i].m_ax, tree[i].m_in);
> }*/
>
>
> for (int i = 1; i <= q; i++)
> {
> m_ax = 0;
> m_in = 1000000;
> scanf("%d%d", &s, &b);
> query(1,s,b);
> printf("%d\n",m_ax-m_in);
> }
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator