线性时间复杂度居然T了?
这是我写的B题代码,不知道为什么会T。
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; #define ll long long #define bool char #define N 500000 #define max(a,b) ((a)>(b)?(a):(b)) inline int read() { char ch=getchar(); int x=0,f=1; for(;ch>'9'||ch<'0';ch=getchar())if(ch=='-')f=-1; for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<1)+(x<<3)+ch-'0'; return x*f; } int n,a[N+10]; int max1[N+10],max2[N+10]; void Init() { max1[1]=a[1]; for(int i=2;i<=n;++i)max1[i]=max(max1[i-1],a[i]); max2[n]=a[n]; for(int i=n-1;i>=1;--i)max2[i]=max(max2[i+1],a[i]); } int main() { // freopen("B.in","r",stdin); // freopen("B.out","w",stdout); int T=read(); ll sum=0;bool flag; while(T--) { n=read();sum=0; for(int i=1;i<=n;++i)a[i]=read(),sum+=a[i]; Init();ll sum1=a[1]+a[2]; flag=0; for(int k=3;k<=n-3;++k)//枚举断点 { sum1+=a[k]; if((max1[k]*2<sum1)&&(max2[k+1]*2<(sum-sum1))){puts("yes");flag=1;break;} } if(!flag)puts("no"); } return 0; }求救~~