#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pll pair<long long, long long>
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define endl '\n'
#define ld long double
#define sz(x) static_cast<int>((x).size())
#define i5 tuple<int,int,int,int,int>
#define all(x) x.begin(), x.end()
#define iiii tuple<int, int,int,int>
#define ld long double
#define lol pair<pll,pll>
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
signed main(){
int n,t;cin>>n>>t;
vector<int> a(n, 0), v;
map<int,int> grad;
int y=0, ans=1e18, cg=0;
for(int i=0;i<n;i++){
cin>>a[i];
a[i]%=t;
v.pb(a[i]);
v.pb(a[i] + t);
}
sort(all(v));
int lp=0;//, cost=0;
for(int i=0;i<n;i++){
ans=min(ans, (v[i+n-1]-v[i])/2 + ((v[i+n-1]-v[i]) % 2));
}
cout<<ans;
return 0;
//for(int i=0;i<n;i++)cost+=v[i]-v[0];
for(int i=0;i<2*n;i++){
while(lp < min(i,n) and v[lp+n] - v[i] < v[i] - v[lp]){
//cost -= v[i]-v[lp];
//cost += v[lp+n]-v[i];
lp++;
}
int cand=max(v[i]-v[lp], v[lp+n-1]-v[i]);
ans=min(ans, cand);
printf("i %lld, lp %lld, rp %lld, cand %lld\n", i, lp, lp+n, cand);
/*
ans=min(ans, cost);
if(i != 2*n)cost += (2*i+2-2*lp-n) * (v[i+1]-v[i]);
printf("cost after is %lld\n", cost);*/
}
cout<<ans;
/*for(int i=0;i<n;i++){
a[i]%=t;
y += min(a[i], T-a[i]);
cg=
grad[a[i]]+=2;
if(t % 2 == 0){
grad[(a[i]+t/2)%t]-=2;
}
else {
grad[(a[i]+t/2)%t]-=1;
grad[(a[i]+t/2+1)%t]-=1;
}
}*/
}
| # | 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... |