Submission #1206556

#TimeUsernameProblemLanguageResultExecution timeMemory
1206556StefanSebezRotating Lines (APIO25_rotate)C++20
63 / 100
3096 ms1608 KiB
#include "rotate.h"
#include <vector>
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
#define ld long double
const int N=50000;
vector<array<int,2>>a;
int n;
vector<int>v;
int dist(int x,int y){return min(abs(x-y),N-abs(x-y));}
ll Calc(){
	ll res=0;
	for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){
			res+=dist(v[i],v[j]);
		}
	}
	return res;
}
ll Calc1(int i){
	ll res=0;
	for(int j=0;j<n;j++){
		if(i==j) continue;
		res+=dist(v[i],v[j]);
	}
	return res;
}
int T[N+50];
void Update(int i,int x){i++;for(;i<=N;i+=i&-i)T[i]+=x;}
int Get(int i){int x=0;i++;for(;i>=1;i-=i&-i)x+=T[i];return x;}
int Get(int l,int r){
	if(l<0) l+=N;
	if(r<0) r+=N;
	l%=N,r%=N;
	if(l<=r) return Get(r)-Get(l-1);
	return Get(N)+Get(r)-Get(l-1);
}
void energy(int n1, std::vector<int> v1){
	v=v1;n=n1;
	/*for(int i=0;i<n;i++) a.pb({v[i],i});
	sort(a.begin(),a.end());
	for(int i=0;i<n;i++){
		if(i<=(n-1)/2){
			rotate({a[i][1]},a[0][0]-a[i][0]);
		}
		else{
			rotate({a[i][1]},a[0][0]-a[i][0]+N);
		}
	}*/
	//ll res=Calc();
	for(auto i:v) Update(i,1);
	for(int i=0;i<n;i++){
		//vector<int>x;
		/*for(int j=0;j<n;j++){
			x.pb(v[j]);
			x.pb((v[j]+N/2)%N);
		}*/
		//for(int j=0;j<N;j++) x.pb(j);
		int ct=0;
		while(1){
			/*ll res=Calc1(i);
			v[i]=(v[i]+1)%N;
			ll x=Calc1(i);
			if(x<=res){
				v[i]=(v[i]-1+N)%N;
				break;
			}
			res=x;*/
			Update(v[i],-1);
			int x=Get(v[i]-N/2+1,v[i]);
			int y=Get(v[i]+1,v[i]+N/2);
			if(x<=y){
				Update(v[i],1);
				break;
			}
			v[i]=(v[i]+1)%N;
			Update(v[i],1);
			ct++;
			//rotate({i},1);
		}
		rotate({i},ct);
		/*ll maks=0,dx;
		for(auto X:x){
			ll sum=0;
			for(int j=0;j<n;j++){
				if(i==j) continue;
				sum+=dist(X,v[j]);
			}
			if(sum>=maks){
				maks=sum;
				dx=X;
			}
		}
		rotate({i},dx-v[i]);
		v[i]=dx;*/
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...