I'm getting TLE for this code. What optimizations are needed to get AC. I'm using max priority queue for the left half and min priority queue for right half. median would be the top of max queue.
#include <iostream>
#include <queue>
using namespace std;
#define MOD 1000000007
typedef unsigned long long lng;
int main()
{
//freopen("in","r",stdin);
int a, b, c, n;
int t;
cin >> t;
for (int I=1; I<= t; I++ )
{
priority_queue<int> maxpq;
priority_queue<int, vector<int>, greater<int> > minpq;
cin >> a >> b >> c >> n;
lng sum = 1LL;
maxpq.push(1);
for (int J=2; J<=n;J++)
{
lng top = lng (maxpq.top());
lng tempsum = ((lng(a)*lng(maxpq.top()))%MOD + (lng(b)*lng(J))%MOD + lng(c))%MOD;
sum += tempsum;
int tmp = int(tempsum);
if (J&1)
{
if (tmp > minpq.top())
{
int move = minpq.top();
minpq.pop();
maxpq.push(move);
minpq.push(tmp);
}
else maxpq.push(tmp);
}
else
{
if (tmp > maxpq.top())
minpq.push(tmp);
else
{
int move = maxpq.top();
maxpq.pop();
minpq.push(move);
maxpq.push(tmp);
}
}
}
cout << sum << endl;
}
return 0;
}