Skip to main content

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;

}