Sub vectors
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
int main() {
freopen("inputf.in", "r", stdin);
freopen("outputf.in", "w", stdout);
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v.at(i);
}
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
//THE SUBARRAY WITH THE MAXIMUM SUM ⏩
int sum = 0, ans = INT_MIN, st, en;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
for (int k = i; k <= j; k++) {
cout << v.at(k) << " ";
sum += v.at(k);
}
cout << " ";
cout << sum << endl;
if /*(max(sum, ans)==sum)*/ (sum > ans) {
ans = sum;
st = i;
en = j;
}
sum = 0;
}
cout << endl;
}
cout << "The maximum sum of a subarray is: " << ans << " as the sum of subarray: " << st << " - " << en << endl;
//<==THE SUBARRAY WITH THE MAXIMUM SUM
/*
//KADEN's ALGORITHM to solve SUBARRAY WITH THE MAXIMUM SUM or "MAXIMUM CONTAGIOUS SUBARRAY"
int sum = 0, ans = INT_MIN;
for (int i = 0; i < n; i++) {
sum += v.at(i);
if (sum > ans) { //or ans=max(ans, sum);
ans = sum;
}
if(sum<0) {
sum=0;
}
}
cout<<ans;
*/
/*
//BEST IMPLEMENTATION OF KADEN's ALGORITHM to solve
//"SUBARRAY WITH THE MAXIMUM SUM or "MAXIMUM CONTAGIOUS SUBARRAY":
int sum = 0, ans = INT_MIN;
for (int i = 0; i < n; i++) {
sum += v.at(i);
ans = max(ans, sum);
sum = max(sum, 0); //to check for -ve numbers ⏩ if the sum is -ve make (sum=0).
}
cout << ans;
//It prints the MAXIMUM SUBARRAY SUM or
//IF ALL THE ELEMENTS ARE -ve, then it prints ONLY THE MAXIMUM -ve NUMBER (only if the the "max(sum, ans)" is applied before "max(sum, 0)").
*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
//KAADANE's ALGORITHM for "( MAXIMUM SUM OF CIRCULAR SUBARRAY )" ⏩
/*
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
int kadane(vector<int> v) {
int sum = 0, ans = INT_MIN;
for (int i = 0; i < v.size(); i++) {
sum += v.at(i);
ans = max(ans, sum);
sum = (sum, 0);
}
return ans;
}
int main() {
freopen("inputf.in", "r", stdin);
freopen("outputf.in", "w", stdout);
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v.at(i);
}
int nonwrap = kadane(v);
int wrap;
int total = 0;
for (int i = 0; i < n; i++) {
total += v.at(i);
v.at(i) = -v.at(i); //This will find the sum of the "non-wrapping SubArray which is to be removed."
}
wrap=total-(-kadane(v)); //as vector(v) has been made -ve, So " [-(sum of -ve vector(v))] ".
cout << max(wrap, nonwrap);
return 0;
}
//<==Ending of MAXIMUM SUM OF CIRCULAR SUBARRAY
*/
/*############################################*/
return 0;
}