#include "tickets.h"
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
#define ll long long
int const N=1510;
ll mul(ll a,ll b)
{
return a*b;
}
long long find_maximum(int k, vector<vector<int>> a) {
int n = a.size();
int m = a[0].size();
long long ans=0;
int l[n],r[n];
int pos[n]={};
int vl[n]={};
for (int i=0;i<n;i++)
l[i]=0,r[i]=m-1;
vector<pair<ll,int>>pq;
vector<vector<int>>ret(n,vector<int>(m,-1));
int sz=n/2;
for (int index=0;index<k;index++)
{
pq={};
ll sm=0;
for (int i=0;i<n;i++)
sm+=a[i][r[i]];
ll temp=ans;
ans=0;
ll ind1=0;
ll cur=0;
for (int j=0;j<n;j++)
pq.push_back({a[j][l[j]]+a[j][r[j]],j});
sort(begin(pq),end(pq));
for (int j=0;j<n;j++)
{
vl[pq[j].second]=j;
if (j<sz-1)
cur+=pq[j].first;
}
for (int i=0;i<n;i++)
{
sm-=a[i][r[i]];
if (vl[i]<sz-1)
{
cur-=pq[vl[i]].first;
cur+=pq[sz-1].first;
}
int ind=-1;
for (int j:{l[i],r[i]})
{
ll an=sm-mul(a[i][j],n-1)-(cur-mul(2,mul(sz-1,a[i][j])));
if (an>=ans)
{
ans=an;
ind=j;
}
}
if (ind!=-1)
ind1=i;
sm+=a[i][r[i]];
if (vl[i]<sz-1)
{
cur+=pq[vl[i]].first;
cur-=pq[sz-1].first;
}
}
{
sm-=a[ind1][r[ind1]];
if (vl[ind1]<sz-1)
{
cur-=pq[vl[ind1]].first;
cur+=pq[sz-1].first;
}
int ind=-1;
for (int j:{l[ind1],r[ind1]})
{
ll an=sm-mul(a[ind1][j],n-1)-(cur-mul(2,mul(sz-1,a[ind1][j])));
if (an>=ans)
{
ans=an;
ind=j;
}
}
for (int j=0;j<n;j++)
pos[j]=1;
if (l[ind1]==ind)
pos[ind1]=0;
else
pos[ind1]=1;
for (int j=0;j<sz-1+(vl[ind1]<sz-1);j++)
{
if (vl[ind1]==j) continue;
pos[pq[j].second]=0;
}
}
ans=temp+ans;
for (int j=0;j<n;j++)
{
if (pos[j])
{
ret[j][r[j]]=index;
r[j]--;
}
else
{
ret[j][l[j]]=index;
l[j]++;
}
}
}
allocate_tickets(ret);
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |