20pts求助
查看原帖
20pts求助
660491
Shengjingtong楼主2024/2/24 10:03

code:

#include<bits/stdc++.h>
using namespace std;
int t[1000001];
int dp[1000001];
inline void read(int &a){
	a = 0;
	register char c = getchar();
	while(c < '0' || c > '9'){
		c = getchar();
	}
	while(c >= '0' && c <= '9'){
		a *= 10;
		a += c - '0';
		c = getchar();
	}
}
deque<int> Q;
int main(){
	int n;
	read(n); 
	for(int i(1);i <= n;++i)read(t[i]);
	int q;
	read(q);
	register int p;
	while(q--){
		read(p);
		Q.clear();
		memset(dp,0,sizeof(dp));
		for(int i = 1;i < n;++i){
			if(!Q.empty() && i - Q.front() >= p){
				Q.pop_front();
			}  
			while(!Q.empty() &&  (dp[Q.back()] > dp[i] || (dp[Q.back()] == dp[i] && Q.back() >= i))){
				Q.pop_back();
			}
			Q.push_back(i);
	  	  	//printf("%d\n",v[Q.front()]);
			dp[i + 1] = dp[Q.front()] + (t[Q.front()] <= t[i + 1]);
		} 
	  	
	  	//cout<<Q.front()<<":"<<t[Q.front()]<<","<<i<<":"<<t[i]<<endl;
		//for(int i = 1;i < n;i++){
		//	cout<<dp[i]<<" ";
		//}
		cout<<dp[n]<<endl; 
	}
	return 0;
}
2024/2/24 10:03
加载中...