#24722: 請求高人指點


gold.brain12000@gmail.com (左手握著名為開朗的盾牌,右手持著被稱為時間的長劍,揮向遠在天...)

學校 : 臺東縣私立育仁高級中學
編號 : 86509
來源 : [210.59.78.81]
最後登入時間 :
2021-04-16 09:20:27
c364. 我鄙視你 -- 106 學年度第一次 CRC 附電盃程式設計團體賽 | From: [210.59.78.247] | 發表日期 : 2021-03-18 11:11

#include<iostream>

using namespace std;

int main(){

  int n;

  while(cin>>n){

    long long int a[n];

    for(int k=0;k<n;k++){cin>>a[k];}

    long long int RtoLsum[2][n];

    long long int LtoRsum[2][n];

    for(int i=0;i<n;i++){RtoLsum[0][i]=0;RtoLsum[1][i]=0;LtoRsum[0][i]=n-1;LtoRsum[1][i]=0;}

    

    for(int k=1;k<n;k++){

      if(a[k]>a[k-1]){

        long long int sum=0;

        int i=k-1;

        for(;a[i]<a[k];){

          sum+=a[i];

          if(i==RtoLsum[0][i]){i--;}

          else{

            sum+=RtoLsum[1][i];

            i=RtoLsum[0][i];

          }

          if(i<=0){i=0;break;}

        }

        RtoLsum[0][k]=i;

        RtoLsum[1][k]=sum;

      }else if(a[k]<=a[k-1]){RtoLsum[0][k]=k;}

    }

  

    for(int k=n-2;k>=0;k--){

      if(a[k]>a[k+1]){

        long long int sum=0;

        int i=k+1;

        for(;a[i]<a[k];){

          sum+=a[i];

          if(i==LtoRsum[0][i]){i++;}

          else{

              sum+=LtoRsum[1][i];

              i=LtoRsum[0][i];

          }

            if(i>=n-1){i=n-1;break;}

        }

        LtoRsum[0][k]=i;

        LtoRsum[1][k]=sum;

      }else if(a[k]<=a[k+1]){LtoRsum[0][k]=k;}

    }

    for(int k=0;k<n;k++){long long int x=LtoRsum[1][k]+RtoLsum[1][k];cout<<x<<endl;}

  }

}

以上 還是會TLE還有RE,而且也有部分答案錯 請問各位高手有那些部份可以優化,謝謝幫忙

 
ZeroJudge Forum