[kuangbin带你飞]专题七 线段树 G POJ 3264
2016-09-22 09:29
411 查看
题目地址:https://vjudge.net/contest/66989#problem/G
思路:求区间最大值和最小值的差。模板题,拍个模板就过了,没发现有什么坑。
AC代码:
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
const int maxn=5e5+10;
struct seq{
int n1,n2,l,r;//n1最大,n2最小
}T[maxn*4];
void build(int l,int r,int k)
{
T[k].l=l,T[k].r=r;
if(l==r)
{
scanf("%d",&T[k].n1);
T[k].n2=T[k].n1;
return;
}
int mid=(l+r)>>1;
build(l,mid,k<<1);
build(mid+1,r,k<<1|1);
T[k].n1=max(T[k<<1].n1,T[k<<1|1].n1);
T[k].n2=min(T[k<<1].n2,T[k<<1|1].n2);
}
int ans1,ans2;
void search(int l,int r,int k)
{
if(T[k].l==l && T[k].r==r)
{
ans1=max(ans1,T[k].n1);
ans2=min(ans2,T[k].n2);
return;
}
//printf("%d\n",k);
int mid=(T[k].l+T[k].r)>>1;
if(r<=mid)
search(l,r,k<<1);
else if(l>mid)
search(l,r,k<<1|1);
else
{
search(l,mid,k<<1);
search(mid+1,r,k<<1|1);
}
}
int main()
{
int n,q;
scanf("%d%d",&n,&q);
build(1,n,1);
while(q--)
{
int a,b;
scanf("%d%d",&a,&b);
ans1=-1,ans2=0x3f3f3f3f;
search(a,b,1);
printf("%d\n",ans1-ans2);
}
}
思路:求区间最大值和最小值的差。模板题,拍个模板就过了,没发现有什么坑。
AC代码:
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
const int maxn=5e5+10;
struct seq{
int n1,n2,l,r;//n1最大,n2最小
}T[maxn*4];
void build(int l,int r,int k)
{
T[k].l=l,T[k].r=r;
if(l==r)
{
scanf("%d",&T[k].n1);
T[k].n2=T[k].n1;
return;
}
int mid=(l+r)>>1;
build(l,mid,k<<1);
build(mid+1,r,k<<1|1);
T[k].n1=max(T[k<<1].n1,T[k<<1|1].n1);
T[k].n2=min(T[k<<1].n2,T[k<<1|1].n2);
}
int ans1,ans2;
void search(int l,int r,int k)
{
if(T[k].l==l && T[k].r==r)
{
ans1=max(ans1,T[k].n1);
ans2=min(ans2,T[k].n2);
return;
}
//printf("%d\n",k);
int mid=(T[k].l+T[k].r)>>1;
if(r<=mid)
search(l,r,k<<1);
else if(l>mid)
search(l,r,k<<1|1);
else
{
search(l,mid,k<<1);
search(mid+1,r,k<<1|1);
}
}
int main()
{
int n,q;
scanf("%d%d",&n,&q);
build(1,n,1);
while(q--)
{
int a,b;
scanf("%d%d",&a,&b);
ans1=-1,ans2=0x3f3f3f3f;
search(a,b,1);
printf("%d\n",ans1-ans2);
}
}
相关文章推荐
- [kuangbin带你飞]专题七 线段树 G POJ 3264
- [kuangbin带你飞]专题七 线段树 C POJ 3468
- 【算法系列学习】线段树 单点覆盖,区间查询最大值 [kuangbin带你飞]专题七 线段树 B - I Hate It
- POJ - 1321 dfs [kuangbin带你飞]专题一
- [kuangbin带你飞]专题一 简单搜索 H - Pots poj 3414
- POJ 2236 A - Wireless Network[kuangbin带你飞]专题五 并查集
- POJ 2253 Frogger(kuangbin带你飞 专题四:最短路)
- [kuangbin带你飞]专题五 并查集 A POJ 2236
- [kuangbin带你飞]专题十二 基础DP1 R POJ 3616
- 【算法系列学习】线段树 区间修改,区间求和 [kuangbin带你飞]专题七 线段树 C - A Simple Problem with Integers
- [kuangbin带你飞]专题一 简单搜索G - Shuffle'm Up(POJ 3087)
- [kuangbin带你飞]专题七 线段树 J HDU 3974
- POJ 3026 Borg Maze(kuangbin带你飞 专题六:最小生成树,完结)
- [kuangbin带你飞]专题五 并查集 B POJ 1611
- [kuangbin带你飞]专题十二 基础DP1 L POJ 1458
- [kuangbin带你飞]专题一 简单搜索 POJ - 1321
- POJ 1251 HDU 1301 Jungle Roads(kuangbin带你飞 专题六:最小生成树)
- POJ 1797 Heavy Transportation(kuangbin带你飞 专题四:最短路)
- [kuangbin带你飞]专题五 并查集 G POJ 1456
- [kuangbin带你飞]专题五 并查集 N POJ 1308