Submission #1315895

#TimeUsernameProblemLanguageResultExecution timeMemory
1315895WH8Room Temperature (JOI24_ho_t1)C++17
100 / 100
226 ms12588 KiB
#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 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...