/*
* @lc app=leetcode id=768 lang=cpp
*
* [768] Max Chunks To Make Sorted II
*/
// @lc code=start
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
const int N = arr.size();
vector<int> expected(arr);
sort(expected.begin(), expected.end());
int res = 0;
long sum = 0, sum2 = 0;
for (int i = 0; i < N; ++i) {
sum += arr[i];
sum2 += expected[i];
if (sum == sum2) ++res;
}
return res;
}
};
// @lc code=end
/*
* @lc app=leetcode id=768 lang=cpp
*
* [768] Max Chunks To Make Sorted II
*/
// @lc code=start
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
const int N = arr.size();
vector<int> f(arr), b(arr);
for (int i = 1; i < N; ++i) f[i] = max(f[i - 1], arr[i]);
for (int i = N - 2; i >= 0; --i) b[i] = min(b[i + 1], arr[i]);
int res = 1;
for (int i = 0; i < N - 1; ++i) {
if (f[i] <= b[i + 1]) ++res;
}
return res;
}
};
// @lc code=end