为什么会AC
查看原帖
为什么会AC
1040770
Demo_B11楼主2023/10/13 21:02

各位dalao,我算过,如果是最坏情况,序列有序,那么我的程序复杂度应该是O(n^2)才对,题目说1<=n<=100000 , 显然TLE , 但是提交上去却AC了 , 这是为什么? code:

#include<bits/stdc++.h>
using namespace std;
int n,ans=0;
int minn(int l,int r,int a[]){
	int ans=l;
	for(int i=l;i<=r;i++){
		if(a[i]<a[ans]){
			ans=i;
		}
	}
	return ans;
}
void jian(int l,int r,int a[],int t){
	for(int i=l;i<=r;i++){
		a[i]-=t;
	}
}
void jc(int l,int r,int a[]){
	if(l>r){
		return;
	}
	int t=minn(l,r,a);
	ans+=a[t];
	jian(l,r,a,a[t]);
	jc(l,t-1,a);
	jc(t+1,r,a);
}
int main(){
	scanf("%d",&n);
	int *a=new int[n+10];
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	jc(1,n,a);
	printf("%d",ans);
	return 0;
}

(难道是因为数据水?)

2023/10/13 21:02
加载中...