Code[VS] 1481 忠诚
来源:互联网 发布:90年代网络歌曲 编辑:程序博客网 时间:2024/04/30 20:55
【题意】给定长度为n的数列,m个询问,每次询问区间最小值
【代码】
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <climits>
using namespace std;
const int N=100001;
struct T
{
int mn,l,r;
}tr[N<<2];
int n,m,x,y;
int min(int i,int j)
{
return i<j?i:j;
}
void build(int now,int l,int r)
{
tr[now].l=l;
tr[now].r=r;
tr[now].mn=INT_MAX;
if (l^r)
{
int t=l+r>>1;
build(now<<1,l,t);
build(now<<1|1,t+1,r);
}
}
void ins(int now,int d,int add)
{
if (tr[now].l==tr[now].r)
{
tr[now].mn=add;
return;
}
int t=tr[now].l+tr[now].r>>1;
if (d<=t) ins(now<<1,d,add); else ins(now<<1|1,d,add);
tr[now].mn=min(tr[now<<1].mn,tr[now<<1|1].mn);
}
int query(int now,int l,int r)
{
if (l<=tr[now].l&&tr[now].r<=r) return tr[now].mn;
int t=tr[now].l+tr[now].r>>1,res=INT_MAX;
if (l<=t) res=min(res,query(now<<1,l,r));
if (t<r) res=min(res,query(now<<1|1,l,r));
return res;
}
int main(void)
{
freopen("test.in","r",stdin);
scanf("%d%d",&n,&m);
build(1,1,n);
for (int i=1;i<=n;i++)
{
scanf("%d",&x);
ins(1,i,x);
}
for (int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
printf("%d ",query(1,x,y));
}
printf("\n");
return 0;
}
- Code[VS] 1481 忠诚
- code vs 忠诚
- code vs 忠诚s
- 忠诚
- VS Code
- VS Code
- VS Code
- VS Code
- VS Code
- vs code
- VS Code
- Software architecture vs code
- Code[VS] 1212 最大公约数
- CODE[VS] 2597 团伙
- CODE[VS] 1201
- CODE[VS] 1202
- CODE[VS] 1203
- CODE[VS] 1206
- Android开发者必须知道的内存管理知识
- Code[VS] 3301 Square words
- Code[VS] 1436 孪生素数2
- Code[VS] 2046 孪生素数3
- 【Codechef】February Challenge 2015 Chef and Strings
- Code[VS] 1481 忠诚
- 编程笔记_JAVA_正则表达式工具
- 编程笔记_JAVA_正则表达式工具
- 怎样利用编程解决问题?
- NOIP 2014 提高组 Day1 T1 生活大爆炸版石头剪刀布
- NOIP 2014 提高组 Day1 T2 联合权值
- 针对效率的自我反思
- 杭电-2071 Max Num
- Vijos 1922 木姑娘的生日