Submission #1212943

#TimeUsernameProblemLanguageResultExecution timeMemory
1212943Rawlat_vanakRotating Lines (APIO25_rotate)C++20
0 / 100
179 ms13540 KiB
#include "rotate.h"
#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define speedIO ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//#define mod 1000000007
#define f first
#define s second
#define pii pair<int,int>
#define pb push_back

const int M=50000;

vector<int> final;

void energy(int n, vector<int> v){

	set<pii> a;
	map<pii,int> b;
	vector<pii> tmp(n);
	for(int i=0;i<n;i++){
		a.insert({v[i],i});
		tmp[i]={v[i],i};
	}
	sort(tmp.begin(),tmp.end());
	for(int i=0;i<n;i++){
		b[{tmp[i].f,tmp[i].s}]=i;
		//cout<<tmp[i].f<<' '<<tmp[i].s<<'\n';
	}
	vector<bool> marked(n,false);
	int idx=0;
	while(idx<n and !a.empty()){
		if(marked[idx]){
			//cout<<"hi\n";
			idx++;
			continue;
		}

		if(tmp[idx].f<M/2){
			auto it=a.upper_bound({tmp[idx].f+M/2,1e9}); // atmost v[i]+90
			it--;
			pii sigh=*it;
			//cout<<sigh.s<<" plsplsplswork\n";
			
			if(b[sigh]-idx>=(n)/2){
				//cout<<"piuhperihgveirjv\n";
				vector<int> wow={tmp[idx].s};
				rotate(wow,tmp[b[sigh]].f+M/2-tmp[idx].f);
				a.erase({tmp[idx].f,tmp[idx].s});
				a.insert({tmp[b[sigh]].f+M/2,tmp[idx].s});
				tmp[idx].f=tmp[b[sigh]].f+M/2;
				marked[b[sigh]]=true;
			}else{
				//cout<<"wpoejfpwepfo\n";
				vector<int> wow={tmp[idx].s};
				rotate(wow,tmp[(b[sigh]+1)%n].f+M/2-tmp[idx].f);
				a.erase({tmp[idx].f,tmp[idx].s});
				a.insert({tmp[(b[sigh]+1)%n].f+M/2,tmp[idx].s});
				tmp[idx].f=tmp[(b[sigh]+1)].f+M/2;
				marked[(b[sigh]+1)%n]=true;
			}

		}else{
			auto it=a.lower_bound({tmp[idx].f-M/2,0}); // atleast v[i]+90
			pii sigh=*it;
			if(idx-b[sigh]>=(n)/2){
			  vector<int> wow={tmp[idx].s};
				rotate(wow,tmp[b[sigh]].f+M/2-tmp[idx].f);
				a.erase({tmp[idx].f,tmp[idx].s});
				a.insert({tmp[b[sigh]].f+M/2,tmp[idx].s});
				tmp[idx].f=tmp[b[sigh]].f+M/2;
				marked[b[sigh]]=true;
			}else{
			  vector<int> wow={tmp[idx].s};
				rotate(wow,tmp[(b[sigh]-1)%n].f+M/2-tmp[idx].f);
				a.erase({tmp[idx].f,tmp[idx].s});
				a.insert({tmp[(b[sigh]-1)%n].f+M/2,tmp[idx].s});
				tmp[idx].f=tmp[(b[sigh]-1)].f+M/2;
				marked[(b[sigh]-1)%n]=true;
			}
		}

		marked[idx]=true;
		idx++;
	}

	
}
#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...