#include"holiday.h"
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
multiset<int> not_used,used;
long long curr=0;
void pop_t()
{
not_used.insert(*used.begin());
curr-=(*used.begin());
used.erase(used.begin());
return;
}
void push_t()
{
used.insert(*prev(not_used.end()));
curr+=(*prev(not_used.end()));
not_used.erase(prev(not_used.end()));
return;
}
void dc(int dl,int dr,int attraction[],int s,int l,int r,vector<long long> &ans,int c)
{
if(dl>dr)
return;
// solving for mid
int dmid=(dl+dr)/2;
while(c*(l-s)+used.size()>dmid)
pop_t();
while(c*(l-s)+used.size()<dmid)
push_t();
int gg=l;
ans[dmid]=curr;
for(int i=l+1;i<r;i++)
{
for(int it=1;it<=c && !used.empty();it++)
pop_t();
if(!used.empty())
{
pop_t();
not_used.insert(attraction[i]);
push_t();
if(curr>ans[dmid])
{
ans[dmid]=curr;
gg=i;
}
}
else
not_used.insert(attraction[i]);
}
// cleaning and recursive calls
for(int i=r-1;i>l;i--)
{
if(not_used.find(attraction[i])!=not_used.end())
not_used.erase(not_used.find(attraction[i]));
else
{
curr-=attraction[i];
used.erase(used.find(attraction[i]));
}
}
dc(dl,dmid-1,attraction,s,l,gg+1,ans,c);
for(int i=l+1;i<=gg;i++)
not_used.insert(attraction[i]);
dc(dmid+1,dr,attraction,s,gg,r,ans,c);
for(int i=gg;i>l;i--)
{
if(not_used.find(attraction[i])!=not_used.end())
not_used.erase(not_used.find(attraction[i]));
else
{
curr-=attraction[i];
used.erase(used.find(attraction[i]));
}
}
return;
}
long long findMaxAttraction(int n,int start,int d,int attraction[])
{
vector<long long> ans[2][2];
for(int i:{0,1})
{
for(int j:{0,1})
{
ans[i][j].resize(d+10);
fill(ans[i][j].begin(),ans[i][j].end(),0);
}
}
for(int i=1;i<=d;i++)
not_used.insert(0);
for(int rev:{0,1})
{
if(start==n-1)
{
for(int i=1;i<=d;i++)
ans[rev][0][i]=ans[rev][1][i]=attraction[n-1];
}
else
{
not_used.insert(attraction[start]);
dc(0,d,attraction,start,start,n,ans[rev][0],1);
dc(0,d,attraction,start,start,n,ans[rev][1],2);
while(!used.empty())
pop_t();
not_used.erase(not_used.find(attraction[start]));
}
reverse(attraction,attraction+n);
start=n-1-start;
attraction[start]=0;
}
long long w=max(ans[0][0][d],ans[1][0][d]);
for(int i=0;i<=d;i++)
w=max({w,ans[0][1][i]+ans[1][0][d-i],ans[0][0][i]+ans[1][1][d-i]});
return w;
}
Compilation message
holiday.cpp: In function 'void dc(int, int, int*, int, int, int, std::vector<long long int>&, int)':
holiday.cpp:28:27: warning: comparison of integer expressions of different signedness: 'std::multiset<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
28 | while(c*(l-s)+used.size()>dmid)
| ~~~~~~~~~~~~~~~~~~~^~~~~
holiday.cpp:30:27: warning: comparison of integer expressions of different signedness: 'std::multiset<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
30 | while(c*(l-s)+used.size()<dmid)
| ~~~~~~~~~~~~~~~~~~~^~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
204 KB |
Output is correct |
3 |
Correct |
1 ms |
204 KB |
Output is correct |
4 |
Correct |
1 ms |
204 KB |
Output is correct |
5 |
Correct |
1 ms |
204 KB |
Output is correct |
6 |
Correct |
1 ms |
204 KB |
Output is correct |
7 |
Correct |
1 ms |
204 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3785 ms |
21232 KB |
Output is correct |
2 |
Correct |
4279 ms |
21284 KB |
Output is correct |
3 |
Correct |
3774 ms |
21384 KB |
Output is correct |
4 |
Correct |
4352 ms |
21228 KB |
Output is correct |
5 |
Correct |
4844 ms |
15428 KB |
Output is correct |
6 |
Correct |
1939 ms |
16200 KB |
Output is correct |
7 |
Correct |
2510 ms |
9960 KB |
Output is correct |
8 |
Correct |
2811 ms |
10212 KB |
Output is correct |
9 |
Correct |
1705 ms |
20032 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
84 ms |
972 KB |
Output is correct |
2 |
Correct |
64 ms |
972 KB |
Output is correct |
3 |
Correct |
67 ms |
1052 KB |
Output is correct |
4 |
Correct |
66 ms |
716 KB |
Output is correct |
5 |
Correct |
60 ms |
644 KB |
Output is correct |
6 |
Correct |
15 ms |
336 KB |
Output is correct |
7 |
Correct |
12 ms |
332 KB |
Output is correct |
8 |
Correct |
12 ms |
332 KB |
Output is correct |
9 |
Correct |
12 ms |
332 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4030 ms |
25588 KB |
Output is correct |
2 |
Correct |
4074 ms |
25592 KB |
Output is correct |
3 |
Correct |
869 ms |
3088 KB |
Output is correct |
4 |
Correct |
37 ms |
480 KB |
Output is correct |
5 |
Correct |
12 ms |
332 KB |
Output is correct |
6 |
Correct |
12 ms |
368 KB |
Output is correct |
7 |
Correct |
12 ms |
332 KB |
Output is correct |
8 |
Correct |
3487 ms |
7644 KB |
Output is correct |
9 |
Correct |
3487 ms |
7620 KB |
Output is correct |