POJ-3264-Balanced Lineup-单点更新

题目链接:

id=3264">http://poj.org/problem?

id=3264

这是一个单点更新的模板题,就不详解了,HDU敌兵布阵那题我有详解;链接:http://blog.csdn.net/wlxsq/article/details/46897219

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<vector>
#include<algorithm>
#define LL long long
using namespace std;
/*
    这是一个线段树单点更新的模板题。只是每一个节点存两个数据。最大值和最小值;
*/
const int inf=0xffffff0;
int MinV,MaxV;
int q,n,a,b;
struct node
{
    int l,r,MinV,MaxV;
}node[200010];
void PushUp(int rt,int v)       //  更新父节点;
{
    node[rt].MinV=min(node[rt].MinV,v);
    node[rt].MaxV=max(node[rt].MaxV,v);
}
void build(int l,int r,int rt)
{
    int mid=(l+r)>>1;
    node[rt].l=l;
    node[rt].r=r;
    node[rt].MinV=inf;
    node[rt].MaxV=-inf;
    if(l==r) return;
    else{
        build(l,mid,rt<<1);
        build(mid+1,r,rt<<1|1);
    }
}
void Insert(int rt,int p,int v)
{
    int l=node[rt].l;
    int r=node[rt].r;
    if(l==r&&p==l){
        node[rt].MinV=v;
        node[rt].MaxV=v;
        return;
    }
    //node[rt].MinV=min(v,node[rt].MinV);
    //node[rt].MaxV=max(v,node[rt].MaxV);
    int mid=(l+r)>>1;
    if(p<=mid) Insert(rt<<1,p,v);
    else Insert(rt<<1|1,p,v);
    PushUp(rt,v);
}
void query(int l,int r,int rt)
{
    if(node[rt].MaxV<=MaxV&&node[rt].MinV>=MinV) return;        //  往下搜没有什么意义了,能够直接退出;
    if(l==node[rt].l&&r==node[rt].r){
        MinV=min(node[rt].MinV,MinV);
        MaxV=max(node[rt].MaxV,MaxV);
        return;
    }
    int mid=(node[rt].l+node[rt].r)>>1;
    if(r<=mid) query(l,r,rt<<1);
    else if(l>mid) query(l,r,rt<<1|1);
    else{
        query(l,mid,rt<<1);
        query(mid+1,r,rt<<1|1);
    }
}
int main()
{
    while(~scanf("%d%d",&n,&q)){
        build(1,n,1);
        for(int i=1;i<=n;i++){
            scanf("%d",&a);
            Insert(1,i,a);
        }
        for(int i=1;i<=q;i++){
            scanf("%d%d",&a,&b);
            MinV=inf;
            MaxV=-inf;
            query(a,b,1);
            printf("%d\n",MaxV-MinV);
        }
    }
    return 0;
}
时间: 2024-12-12 11:30:42

POJ-3264-Balanced Lineup-单点更新的相关文章

poj 3264 Balanced Lineup

题目链接:http://poj.org/problem?id=3264 题目大意:就是给你一串数,问你最大数和最小数的差值....... 思路:最基本的线段树,只需要建树和查询,修改都省啦,但是查询要写两个,一个查询最大值,一个查询最小值......然后就能AC掉.....但是话说poj把它分类到RMQ中.... code: #include<cstdio> #include<cmath> #include<algorithm> #include<iostream

[POJ] 3264 Balanced Lineup [ST算法]

Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 34306   Accepted: 16137 Case Time Limit: 2000MS Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer Joh

poj 3264 Balanced Lineup(线段数求区间最大最小值)

链接:http://poj.org/problem?id=3264 Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 32772   Accepted: 15421 Case Time Limit: 2000MS Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order.

POJ 3264 Balanced Lineup ST表

链接:http://poj.org/problem?id=3264 题意:给一串数字,多次询问,求区间最大值和区间最小值的差. 思路:RMQ问题,可以用O(N^2)的预处理,然后每次O(1)的查询,可以用线段树,O(N)的建树,O(logN)的查询,可以用ST表记录,O(NlogN)的预处理,O(1)的查询. 实际上ST表的预处理过程也是一个DP的过程dp[i][j]表示从第i位开始连续2^j位的区间最值. 预处理:dp[i][j]=min(dp[i][j],dp[i+2^j][j]),查询:q

POJ 3264 Balanced Lineup (线段树单点更新 区间查询)

Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 36820   Accepted: 17244 Case Time Limit: 2000MS Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer Joh

POJ - 3264——Balanced Lineup(入门线段树)

Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 68466   Accepted: 31752 Case Time Limit: 2000MS Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer Joh

POJ 3264 Balanced Lineup(st或者线段树)

A - Balanced Lineup Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 3264 Appoint description:  System Crawler  (2015-08-03) Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,00

POJ 3264 Balanced Lineup (线段树||RMQ)

A - Balanced Lineup Crawling in process... Crawling failed Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 3264 Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always li

POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】

Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 53703   Accepted: 25237 Case Time Limit: 2000MS Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer Joh

poj 3264 Balanced Lineup 题解

Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Submit Status Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to organi