线段树90pts TLE求助!
  • 板块P1816 忠诚
  • 楼主卷王慢即快
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/12/25 21:12
  • 上次更新2023/10/24 06:37:11
查看原帖
线段树90pts TLE求助!
494699
卷王慢即快楼主2022/12/25 21:12
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, m, x, y;
int a[100001];
int tree[500001];
inline int read()
{
	int x = 0, f = 1;
	char ch = getchar();
	while(ch < '0' || ch > '9')
	{
		if(ch == '-') f = -1;
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9')
	{
		x = (x << 1) + (x << 3) + (ch ^ 48);
		ch = getchar();
	}
	return x * f;
}
inline void refresh_tree(const int u)
{
	tree[u] = tree[u << 1] + tree[(u << 1) + 1];
}
inline void build(const int u, int L, int R) //��ʼ 
{
	if(L == R)
	{
		tree[u] = a[L];
		return ;
	}
	int mid = (L + R) >> 1;
	build(u << 1, L, mid);
	build(u << 1 | 1, mid + 1, R);
	refresh_tree(u);
}
inline int query(int u, int L, int R, int l, int r)
{
	if(L == R) return tree[u];
	int mid = (L + R) >> 1;
	if(r <= mid) return query(u << 1, L, mid, l, r);
	if(l > mid) return query(u << 1 | 1, mid + 1, R, l, r);
	return min(query(u << 1, L, mid, l, r), query(u << 1 | 1, mid + 1, R, l, r));
}
int main()
{
	n = read(), m = read();
	for(int i = 1; i <= n; i++)
		a[i] = read();
	build(1, 1, n);
	while(m--)
	{
		x = read(), y = read();
		printf("%d ", query(1, 1, n, x, y));
	}
	return 0;
}

2022/12/25 21:12
加载中...