线段树根本过不了!!!

P1440 求m区间内的最小值

用printf试试
by 崔化博 @ 2022-08-07 12:55:40


不吸氧也能过啊
by OoXiao_QioO @ 2022-08-07 12:56:40


对对,用printf@[czy0323](/user/538427)
by OoXiao_QioO @ 2022-08-07 12:57:08


关同步用 `std::cout << '\n'`
by xyf007 @ 2022-08-07 12:59:34


`endl;` 太慢
by Micnation_AFO @ 2022-08-07 13:23:19


@[崔化博](/user/304524) 好的,我试试
by czy0323 @ 2022-08-07 13:27:07


@[崔化博](/user/304524) 过了,谢谢大佬的帮助
by czy0323 @ 2022-08-07 13:31:17


@[xyf007](/user/68273) @[OoXiao_QioO](/user/721429) @[Leap_hash_jperm](/user/574944) 已过,谢谢各位大佬
by czy0323 @ 2022-08-07 13:32:46


**嘿,突击检查**
by ocean2th8 @ 2022-08-08 22:09:36


你看看这个代码呢! ``` /* @filename: 区间最小值-线段树做法 @author: sww @date: 2022-10-26 15:41:58 星期三 @version: V1.0.0 */ #include <iostream> #define maxn 2000005 #define lc k << 1 #define rc k << 1 | 1 using namespace std; int read() { int x = 0, w = 1; char ch = getchar(); while (ch < '0' || ch > '9') { if (ch == '-') w = -1; ch = getchar(); } while (ch >= '0' && ch <= '9') { x = x * 10 + (ch - '0'); ch = getchar(); } return x * w; } struct node { int l, r; int date; } tree[maxn * 4]; int a[maxn], n, m, x, y; void build(int k, int l, int r) { if (l > r) return; tree[k].l = l; tree[k].r = r; if (l == r){ tree[k].date = a[l]; return; } int mid = (l + r) >> 1; build(lc, l, mid); build(rc, mid + 1, r); tree[k].date = min(tree[lc].date, tree[rc].date); } int find(int k, int l, int r) { if (l <= tree[k].l && r >= tree[k].r) return tree[k].date; int mid = (tree[k].l + tree[k].r) >> 1; int Min = 0x3f3f3f3f; if (l <= mid) Min = min(Min, find(lc, l, r)); if (r > mid) Min = min(Min, find(rc, l, r)); return Min; } int main() { n = read(), m = read(); for (int i = 1; i <= n; i++) a[i] = read(); a[0] = 0x3f3f3f3f; build(1,1,n); for (int i = 1; i <= n; i++) { x = i - m, y = i - 1; if (x < 0) //如果左端点超过了,则将左端点设为1 x = 1; if (x > y)//如果左端点比右端点还大 { printf("%d\n", 0); continue; } printf("%d\n", find(1, x, y)); } return 0; }
by Ly_boy @ 2022-10-29 11:03:57


|