Help me in solving TRIPLETMIN problem

My issue

Showing Runtime Error

My code

#include <bits/stdc++.h>
using namespace std;

int main() {
    long long t;
    cin>>t;
    while(t--)
    {
        long long n, q;
        cin>>n>>q;
        long long a[n];
        for(long long i = 0; i < n; i++)
        {
            cin>>a[i];
        }
        sort(a, a + n);
        int prefsum[n - 2];
        int sum = 0;
        for(int i = 0; i < n - 2; i++)
        {
            sum += (n - i - 1)*(n - i - 2)/2;
            prefsum[i] = sum;
        }
        while(q--)
        {
            long long k;
            cin>>k;
            int ans;
            int s = 0, e = n - 3;
            while(s <= e)
            {
                int mid = (s + e)/2;
                if(k > prefsum[mid])
                {
                    s = mid + 1;
                }
                else
                {
                    ans = mid;
                    e = mid - 1;
                }
            }
            cout<<a[ans]<<endl;
        }
    }
	return 0;
}

Problem Link: TRIPLETMIN Problem - CodeChef

@aayushgupta13
U have to take sum and prefsum as long long int as well
i have corrected your code
include <bits/stdc++.h>
using namespace std;

int main() {
long long t;
cin>>t;
while(t–)
{
long long n, q;
cin>>n>>q;
long long a[n];
for(long long i = 0; i < n; i++)
{
cin>>a[i];
}
sort(a, a + n);
long long int prefsum[n - 2];
long long int sum = 0;
for(int i = 0; i < n - 2; i++)
{
sum += (n - i - 1)*(n - i - 2)/2;
prefsum[i] = sum;
}
while(q–)
{
long long k;
cin>>k;
int ans;
int s = 0, e = n - 3;
while(s <= e)
{
int mid = (s + e)/2;
if(k > prefsum[mid])
{
s = mid + 1;
}
else
{
ans = mid;
e = mid - 1;
}
}
cout<<a[ans]<<endl;
}
}
return 0;
}

Ok thanks. Actually I changed all int to long long but I added some part later.

1 Like