Suma Podniza Karata (Uvod u algoritme)

Moze li neko da me navede kako da uprostim vremensku slozenost ovog koda. Ako sam dobro razumeo zadatak, moze do K karata da se izbaci, samim tim za svaku iteraciju ce se povecavati broj vrednosti koje treba da uporedim kako bih dobio maksimalnu. Ipak, feedback je TLE.

#include <iostream>
#include <string>


using namespace std;

int main() {
	
	int N, K;
	int *arr;
	int max;
	
	cin >> N;
	
	arr = new int[N];
	
	if (N < 2 || N > 500000) {
		fprintf(stderr, "Los input\n");
		exit(EXIT_FAILURE);
	}
	
	cin >> K;
	
	
	if (K < 0 || K > N - 2) {
		fprintf(stderr, "Los input\n");
		exit(EXIT_FAILURE);
	}

	for (int i = 0; i < N; i++) {
		cin >> arr[i];
		if (arr[i] < -1000000 || arr[i] > 1000000) {
			fprintf(stderr, "Los input\n");
			exit(EXIT_FAILURE);
		}	
	}
		
	max = arr[N-1] - arr[0];

	for (int i = 1; i <= K; i++) {
		
		for (int j = 0; j <= i; j++) {
			
			if (max < arr[j+N-1-i] - arr[j]) 
				max = arr[j + N - 1 - i] - arr[j];
			
			cout << (arr[j + N - 1 - i] - arr[j]) << endl;
		
		}	
	
	}	
	cout << max << endl;
	delete [] arr;
		
	return 0;
	
}