90pts求调
  • 板块P1816 忠诚
  • 楼主lyhqwq
  • 当前回复10
  • 已保存回复10
  • 发布时间2022/5/17 21:12
  • 上次更新2023/10/28 01:13:39
查看原帖
90pts求调
100690
lyhqwq楼主2022/5/17 21:12
#include<bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
#define il inline
using namespace std;
int m,n;
int a[1000005],c[1000005];
int lowbit(int x){
	return x&(-x); 
}
void update(int x,int y){
	for(int i=x;i<=n;i+=lowbit(i)){
		if(c[i]>y) c[i]=y;
		else return;
	} 
}
int query(int x,int y){
	int minx=2147483647;
	int wzx=y;
	while(wzx>=x){
		if(wzx-lowbit(wzx)>x){
			minx=min(minx,c[wzx]);
			wzx-=lowbit(wzx);
		}
		else{
			minx=min(minx,a[wzx]);
			wzx--;
		}
	}
	return minx;
}
int main(){
	//freopen("P1816_9.in","r",stdin);
	//freopen("1816.out","w",stdout);
	memset(c,127,sizeof(c));
	cin>>m>>n;
	for(int i=1;i<=m;i++){
		cin>>a[i];
		update(i,a[i]);
	}
	for(int i=1;i<=n;i++){
		int x,y;
		cin>>x>>y;
		cout<<query(x,y)<<" ";
	}
	return 0;
}

2022/5/17 21:12
加载中...