# Diamond Collector Help

I can’t find the issue with this solution… It passes all test cases except 3 and 6…
Problem Link

``````#include <bits/stdc++.h>

using namespace std;

int main() {
//freopen("diamond.in","r",stdin);
//freopen("diamond.out","w",stdout);
int N, K;
cin >> N >> K;
vector<int> size(N);
for (int i=0; i<N; i++) {
cin >> size[i];
}
sort(size.begin(),size.end());
int left = 0;
int right = 0;
int ans1 = 0;
vector<tuple<int,int,int>> minarray;
while (left!=(N-1)) {
if ((size[right]-size[left])<=K) {
if (right<(N-1)) {
right++;
}
else {
break;
}
}
else {
if (max(ans1,(right-left)) > ans1) {
ans1 = max(ans1,(right-left));
minarray.push_back({right-left,left,right});
}
left++;
}
}
vector<int> size2;
sort(minarray.begin(),minarray.end());
int last = get<0>(minarray[minarray.size()-1]);
int maximum=0;
int ans2 = 0;
for (int i=0; i<minarray.size(); i++) {
size2 = size;
size2.erase(size2.begin()+get<1>(minarray[i]), size2.begin()+get<2>(minarray[i]));
ans1 = get<2>(minarray[i])-get<1>(minarray[i]);
N = size2.size();
left = 0;
right = 0;
ans2 = 0;
while (left!=(N-1)) {
if ((size2[right]-size2[left])<=K) {
if (right<(N-1)) {
right++;
}
else {
break;
}
}
else {
if (max(ans2,(right-left)) > ans2) {
ans2 = max(ans2,(right-left));
}
left++;
}
maximum = max(ans1+ans2,maximum);
}
}
cout << maximum;
}
``````

Sorry I gave the wrong code… Here is the actual code. Please disregard the code above.

``````#include <bits/stdc++.h>

using namespace std;

int main() {
freopen("diamond.in","r",stdin);
freopen("diamond.out","w",stdout);
int N, K;
cin >> N >> K;
vector<int> size(N);
for (int i=0; i<N; i++) {
cin >> size[i];
}
sort(size.begin(),size.end());
size.push_back(size[size.size()-1]);
int left = 0;
int right = 0;
int ans1 = 0;
vector<tuple<int,int,int>> minarray;
while (left!=(N)) {
if ((size[right]-size[left])<=K) {
if (right<(N)) {
right++;
}
else {
break;
}
}
else {
right--;
if ((right-left) >= ans1) {
ans1 = (right-left);
minarray.push_back({right-left,left,right});
}
right++;
left++;
}
}
vector<int> size2;
sort(minarray.begin(),minarray.end());
int maximum=0;
int ans2 = 0;
for (int i=0; i<minarray.size(); i++) {
size2 = size;
size2.erase(size2.begin()+get<1>(minarray[i]), size2.begin()+get<2>(minarray[i])+1);
ans1 = get<0>(minarray[i]);
N = size2.size();
left = 0;
right = 0;
ans2 = 0;
while (left!=(N)) {
if ((size2[right]-size2[left])<=K) {
if (right<(N)) {
right++;
}
else {
break;
}
}
else {
right--;
if (right-left > ans2) {
ans2 = right-left;
}
right++;
left++;
maximum = max(ans1+ans2,maximum);
}
}
}
cout << maximum+2;
}
``````

Never mind, I solved it. Please disregard this whole topic.