82分,两个点超时了捏,求助(悬赏关注)
  • 板块P1816 忠诚
  • 楼主RingTouSou
  • 当前回复4
  • 已保存回复5
  • 发布时间2023/11/2 17:39
  • 上次更新2023/11/2 19:51:27
查看原帖
82分,两个点超时了捏,求助(悬赏关注)
1034242
RingTouSou楼主2023/11/2 17:39
#include<cstring>
#include<iostream>
#include<algorithm>
#include<climits>

using namespace std;

#define N 200005
#define LL long long
#define lc u<<1   //乘二  
#define rc u<<1|1 //乘二+1

int w[N];

struct Tree
{
	LL l,r,sum;     //线段树    懒标记是0和1
}tr[N*4];


void build(LL u,LL l,LL r)  //建树     (父节点,左端点,右端点)
{
	tr[u]={l,r,w[l]};
	if(l==r) return;
	LL m=l+r>>1;   //除二
	build(lc,l,m);
	build(rc,m+1,r);
}

LL query(LL u,LL l,LL r){      //区间查找(输出)  (父节点,总左端点,总右端点)
	LL max=INT_MAX;
	if(tr[u].r==tr[u].l) return tr[u].sum;
	LL m=tr[u].l+tr[u].r>>1;  //除二
	if(l<=m) max=min(max,query(lc,l,r));
	if(r>m) max=min(max,query(rc,l,r));
	return max;
}

int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int n,m,x,y;
	cin>>n>>m;
	for(int i=1;i<=n;++i)
	{
		cin>>w[i];
	}
	
build(1,1,n);
while(m--)
{
	cin>>x>>y;
	cout<<query(1,x,y)<<' ';
}
return 0;

}
2023/11/2 17:39
加载中...