专栏文章

cf622c

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miok8nhm
此快照首次捕获于
2025/12/02 20:34
3 个月前
此快照最后确认于
2025/12/02 20:34
3 个月前
查看原文
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int a[maxn];
int lg[maxn];
int fmax1[maxn][25];
int fmin1[maxn][25]; 
int x[maxn];
int maxx[maxn];
int minn[maxn];
int n,m;
void q1(){
	for(int i=1;i<=n;i++){
		fmax1[i][0]=i;
	}
	for(int i=2;i<=n;i++){
		lg[i]=lg[i/2]+1;
	}
	for(int j=1;(1<<j)<=n;j++){
		for(int i=1;i+(1<<j)-1<=n;i++){
			if(a[fmax1[i][j-1]]<=a[fmax1[i+(1<<(j-1))][j-1]]){
				fmax1[i][j]=fmax1[i+(1<<(j-1))][j-1];
			}else fmax1[i][j]=fmax1[i][j-1];
		}
	}
	return ;
}
void q2(){
	for(int i=1;i<=n;i++){
		fmin1[i][0]=i;
	}
	for(int i=2;i<=n;i++){
		lg[i]=lg[i/2]+1;
	}
	for(int j=1;(1<<j)<=n;j++){
		for(int i=1;i+(1<<j)-1<=n;i++){
			if(a[fmin1[i][j-1]]<=a[fmin1[i+(1<<(j-1))][j-1]]){
				fmin1[i][j]=fmin1[i+(1<<(j-1))][j-1];
			}else fmin1[i][j]=fmin1[i][j-1];
		}
	}
	return ;
}
int out(int l,int r,int shu){
	int len=r-l+1;
	int k=lg[len];
	int ansmax=0,ansmin=0;
	if(a[fmax1[l][k]]<=a[fmax1[r-(1<<k)+1][k]]){
		ansmax=fmax1[r-(1<<k)+1][k];
	}
	else ansmax=fmax1[l][k];
	
	if(a[fmin1[l][k]]<=a[fmin1[r-(1<<k)+1][k]]){
		ansmin=fmin1[r-(1<<k)+1][k];
	}
	else ansmin=fmin1[l][k];
	
//	max(fmax1[l][k]],fmax1[r-(1<<k)+1][k]);
//	min(fmin11[l][k],fmin1[r-(1<<k)+1][k]);
	if(a[ansmax]==shu&&a[ansmin]==shu)return -1;
	else if(a[ansmax]==shu)return ansmin;
	else return ansmax;

}
int main(){
    ios::sync_with_stdio(0),cin.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	q1();
	q2();
	for(int i=1;i<=m;i++){
		int l,r;
		cin>>l>>r>>x[i];
		cout<<out(l,r,x[i])<<endl;
	}


	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...