社区讨论

贪心能过,求算复杂度

P3572[POI 2014] PTA-Little Bird参与者 4已保存回复 5

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@m10nc45c
此快照首次捕获于
2024/09/13 19:39
去年
此快照最后确认于
2025/11/04 21:17
4 个月前
查看原帖
rt,我觉得卡不到 O(n2)O(n^2)
代码:
CPP
#include<cstdio>
using namespace std;
int a[1000005];
int main()
{
	//freopen("north.in","r",stdin);
	//freopen("north.out","w",stdout);
	int n,q;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	scanf("%d",&q);
	for(int z=1;z<=q;z++){
		int k,st=1,now=a[1],l=0;
		scanf("%d",&k);
		while(st<n){
			if(st+k>=n){
				if(now<=a[n])l++;
				st=n;
			}
			else{
				int min=2147483647,max=0,x,y,c=0,z;
				for(int j=st+1;j<=st+k;j++){
					if(a[j]>=max){
						max=a[j];
						x=j;
					}
					if(a[j]<=min){
						min=a[j];
						y=j;
					}
					if(a[j]>=c&&a[j]<now){
						c=a[j];
						z=j;
					}	
				}
				if(min>=now){
					st=x;
					now=max;
					l++;
				}
				else{
					st=z;
					now=c;
				}
			}
		}
		printf("%d\n",l);
	}
}

回复

5 条回复,欢迎继续交流。

正在加载回复...