C# Hackerrank挑战-已完成,但未完成';我不理解最优解

C# Hackerrank挑战-已完成,但未完成';我不理解最优解,c#,time-complexity,C#,Time Complexity,因此,我已经完成了具有以下链接的挑战: 使用C#中的以下代码: 使用System.CodeDom.Compiler; 使用System.Collections.Generic; 使用系统集合; 使用系统组件模型; 使用System.Diagnostics.CodeAnalysis; 利用制度全球化; 使用System.IO; 使用System.Linq; 运用系统反思; 使用System.Runtime.Serialization; 使用System.Text.RegularExpressio

因此,我已经完成了具有以下链接的挑战:

使用C#中的以下代码:

使用System.CodeDom.Compiler;
使用System.Collections.Generic;
使用系统集合;
使用系统组件模型;
使用System.Diagnostics.CodeAnalysis;
利用制度全球化;
使用System.IO;
使用System.Linq;
运用系统反思;
使用System.Runtime.Serialization;
使用System.Text.RegularExpressions;
使用系统文本;
使用制度;
类解决方案{
//完成下面的阵列操作功能。
静态长数组操作(int n,int[][]查询){
long[]arr=新长[n];
长计数=0;
long largestValue=long.MinValue;
for(int i=0;i
但是,它在某些测试用例中失败,因为它没有以最佳速度运行。我已经读过关于如何改进的解释,但我不理解。它讨论了将
-k
添加到
i+1
和前缀和。。。老实说,我觉得和这条鱼在一起就像一条挣扎的鱼。我不知道是否有人可能帮助解释,或者仅仅是解释

最佳描述是:


当他们说直接的解决方案是O(nxm)但最优解决方案运行在O(mxlog(M))中时,你理解他们的意思吗?我理解前缀和只检查所有更新的2个值(计算出前缀和算法是什么),但我不明白他们是如何得到O(mlog(M))的不。。。。
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text.RegularExpressions;
using System.Text;
using System;

class Solution {

    // Complete the arrayManipulation function below.
    static long arrayManipulation(int n, int[][] queries) {
        long[] arr = new long[n];
        long count = 0;
        long largestValue = long.MinValue;

        for (int i = 0; i < queries.Length; ++i)
        {
            long startIndex = queries[i][0];
            long endIndex = queries[i][1];
            long numberToAdd = queries[i][2];

            for (long j = startIndex - 1; j <= endIndex - 1; ++j)
            {
                arr[j] += numberToAdd;
            }
        }

        return arr.Max();
    }

    static void Main(string[] args) {
        TextWriter textWriter = new StreamWriter(@System.Environment.GetEnvironmentVariable("OUTPUT_PATH"), true);

        string[] nm = Console.ReadLine().Split(' ');

        int n = Convert.ToInt32(nm[0]);

        int m = Convert.ToInt32(nm[1]);

        int[][] queries = new int[m][];

        for (int i = 0; i < m; i++) {
            queries[i] = Array.ConvertAll(Console.ReadLine().Split(' '), queriesTemp => Convert.ToInt32(queriesTemp));
        }

        long result = arrayManipulation(n, queries);

        textWriter.WriteLine(result);

        textWriter.Flush();
        textWriter.Close();
    }
}