比赛 |
区间问题练习 |
评测结果 |
AAAAAAAAAA |
题目名称 |
忠诚 |
最终得分 |
100 |
用户昵称 |
kZime |
运行时间 |
0.166 s |
代码语言 |
C++ |
内存使用 |
3.62 MiB |
提交时间 |
2017-04-21 18:49:41 |
显示代码纯文本
#include <bits/stdc++.h>
#define MAXN 100023
using namespace std;
int a[MAXN], n, m;
inline int get_num() {
int k = 0, f = 1;
char c = getchar();
for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;
for(; isdigit(c); c = getchar()) k = k * 10 + c - '0';
return k * f;
}
struct segtree{
int mi[MAXN << 2];
segtree() {
memset(mi, 0, sizeof(mi));
}
void build(int x, int l, int r) {
if(l == r) {
mi[x] = a[l];
return;
}
else {
int mid = (l + r) >> 1;
build(x << 1, l, mid);
build(x << 1 | 1, mid + 1, r);
mi[x] = min(mi[x << 1], mi[x << 1 | 1]);
}
}
int find(int x, int l, int r, int s, int t) {
int mid = (l + r) >> 1;
if(l == s && t == r) return mi[x];
else if(t <= mid) return find(x << 1, l, mid, s, t);
else if(s > mid) return find(x << 1 | 1, mid + 1, r, s, t);
else {
return min(find(x << 1, l, mid, s, mid), find(x << 1 | 1, mid + 1, r, mid + 1, t));
}
}
}T;
int main() {
freopen("faithful.in", "r", stdin);
freopen("faithful.out", "w", stdout);
segtree T;
m = get_num();
n = get_num();
for(int i = 1; i <= m; i++) {
a[i] = get_num();
}
T.build(1, 1, m);
while(n--) {
int s = get_num();
int t = get_num();
printf("%d ", T.find(1, 1, m, s, t));
}
}