bzoj 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二 RMQ
2017-10-04 13:46
543 查看
Description
洞窟里有一道长长的通道.它由N(1≤N≤25000)段道尾相连构成,编号分别为1到N.每个通道有一个阈值,其范围在[1,10^9]依次通过i..j的通道,那奶牛的体重指数就不能超过i..j通道中阈值的最小值.贝茜有Q(1≤Q≤25000)个问题,想请教你由i到j的通道的阈值的最小值.Input
第1行输入N和Q,接下来N行输入每个通道的阈值,之后Q行每行两个整数,对应问题中的i和j(i<j).Output
对于每个问题,输出其结果.Sample Input
10 475
30
100
38
50
51
52
20
81
5
1 10
3 5
6 9
8 10
Sample Output
538
20
5
HINT
Source
Orange显然是裸的RMQ。。。
第一篇博客庆祝一下中秋节
没事闲的又打了一下线段树。。
也是第一个线段树吧
/**************************************************************
Problem: 3381
User: tangyunkai1
Language: C++
Result: Accepted
Time:120 ms
Memory:2852 kb
****************************************************************/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int dp[25005][16];
int main ()
{
int n,q;
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&dp[i][0]);
}
for(int j=1;j<=15;j++)
{
for(int i=1;i<=n;i++)
{
if(i-1+(1<<j)>n) break;
dp[i][j]=min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
//printf("%d %d %d\n",i,i-1+(1<<j),dp[i][j]);
}
}
for(int i=1;i<=q;i++)
{
int l,r;
scanf("%d%d",&l,&r);
int len=r-l+1;
int j;
for(j=1;j<=15;j++)
{
if((1<<j)>len) break;
}
j-=1;
int ans=min(dp[l][j],dp[r-(1<<j)+1][j]);
printf("%d\n",ans);
}
return 0;
}
/*
10 4
75 30 100 38 50 51 52 20 81 5
1 10
3 5
6 9
8 10
*/
/**************************************************************
Problem: 3381
User: tangyunkai1
Language: C++
Result: Accepted
Time:136 ms
Memory:2576 kb
****************************************************************/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
struct nodesegtree
{
int l;
int r;
int min_val;
}segtree[100005];
int a[30005];
void build(int l,int r,int num)
{
segtree[num].l=l;
segtree[num].r=r;
if(l==r)
{
segtree[num].min_val=a[l];
return ;
}
int mid=(l+r)>>1;
build(l,mid,num*2);
build(mid+1,r,num*2+1);
segtree[num].min_val=min(segtree[num*2].min_val,segtree[num*2+1].min_val);
}
int ans;
void minn(int x,int y,int num)
{
int l=segtree[num].l;
int r=segtree[num].r;
if(l>=x&&r<=y)
{
ans=min(ans,segtree[num].min_val);
}
else if(y>=l&&x<=r)
{
minn(x,y,num*2);
minn(x,y,num*2+1);
}
}
int main ()
{
int n,q;
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
build(1,n,1);
for(int i=1;i<=q;i++)
{
int x,y;
scanf("%d%d",&x,&y);
ans=999999999;
minn(x,y,1);
printf("%d\n",ans);
}
return 0;
}
相关文章推荐
- bzoj 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二(RMQ)
- bzoj 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二
- 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二
- BZOJ 3382: [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三
- bzoj3382 [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三
- bzoj 3383: [Usaco2004 Open]Cave Cows 4 洞穴里的牛之四
- bzoj 3382: [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三(切比雪夫距离)
- bzoj 3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(状压+BFS)
- bzoj 3383: [Usaco2004 Open]Cave Cows 4 洞穴里的牛之四(set+BFS)
- BZOJ3382: [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三
- Bzoj 3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一
- 3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一
- 【bzoj3379】[Usaco2004 Open]Turning in Homework 交作业 区间dp
- 【BZOJ】3403: [Usaco2009 Open]Cow Line 直线上的牛(模拟)
- POJ 1988/bzoj3376[Usaco2004 Open]Cube Stacking 方块游戏
- BZOJ 3379: [Usaco2004 Open]Turning in Homework 交作业
- bzoj 3376: [Usaco2004 Open]Cube Stacking 方块游戏 带权并查集
- bzoj3376/poj1988[Usaco2004 Open]Cube Stacking 方块游戏
- BZOJ 3377 [Usaco2004 Open]The Cow Lineup 奶牛序列
- 【BZOJ 3376】[Usaco2004 Open]Cube Stacking 方块游戏 带权并查集