#include "rotate.h"
#include <bits/stdc++.h>
using namespace std;
int cur[100005], target[100005], indx[100005], placed[100005], n;
vector<pair<int, int> > b, c;
void solve(int i)
{
placed[i]=1;
if (cur[i]==target[i])
return;
if (cur[i]>target[i])
{
vector<int> tmp;
tmp.push_back(indx[i]);
rotate(tmp, (target[i]-cur[i]+50000)%50000);
return;
}
if (i<n/2*2-1 && cur[i+1]<target[i])
solve(i+1);
vector<int> tmp;
tmp.push_back(indx[i]);
rotate(tmp, (target[i]-cur[i]+50000)%50000);
}
void energy(int N, vector<int> a)
{
int n=N, ind;
for (int i=0; i<n; i++)
b.push_back({a[i], i});
sort(b.begin(), b.end());
for (int i=0; i<n; i++)
{
if ((b[(i+n/2)%n].first-b[i].first+50000)%50000<=25000)
{
ind=i;
break;
}
}
for (int i=ind; i<ind+n; i++)
c.push_back({(b[i%n].first-b[ind].first+50000)%50000, b[i%n].second});
if (n&1)
{
vector<int> tmp;
tmp.push_back(c[n-1].second);
rotate(tmp, (c[0].first-c[n-1].first+50000)%50000);
}
for (int i=0; i<n/2; i++)
{
cur[i]=c[i+n/2].first;
target[i]=(c[i].first+25000)%50000;
indx[i]=c[i+n/2].second;
}
for (int i=0; i<n/2; i++)
if (!placed[i])
solve(i);
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |