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