30pts求调
查看原帖
30pts求调
988025
xxsevenWishBloom楼主2024/4/30 14:16

代码在下面,AC#2 #3 #9
思路是拿两个指针做类似单调队列的处理,但略有不同(我不会写常规的单调队列QAQ)

样例能过,自己搓了点小数据也都过了,在纸上推了半天也没看出来问题在哪

求救!

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int a[N];
int *first,*last;
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	int n,k;
	cin>>n>>k;
	for(int i=0;i<n;++i){
		cin>>a[i];
	}
	first=last=a;
	for(int i=0;i<n;++i){		//维护最小值 
		if(last-first+1>k) {
			first++;
			while(first<last&&*first>=*(first+1)) first++;
		}
		if(*first>=*last) first=last;
		if(i>=k-1) cout<<*first<<' ';
		last++;
	}
	cout<<'\n';
	first=last=a;
	for(int i=0;i<n;++i){		//维护最大值 
		if(last-first+1>k) {
			first++;
			while(first<last&&*first<=*(first+1)) first++;
		}
		if(*first<=*last) first=last;
		if(i>=k-1) cout<<*first<<' ';
		last++;
	}
	return 0;
}

2024/4/30 14:16
加载中...