Submission #1157825

#TimeUsernameProblemLanguageResultExecution timeMemory
1157825dibamboo23Road Construction (JOI21_road_construction)C++20
5 / 100
2452 ms2127280 KiB
/* author : Dinmukhammed ^_^ */ #include <bits/stdc++.h> using namespace std; #define F first #define S second #define sz size() #define ll long long #define ld long double const int N=1e6+3; const ll inf=1e18; const ll MOD=1e9+7; ll t[N*4],t1[N*4]; void build(int v=1,int tl=1,int tr=(int)1e6){ t[v]=t1[v]=inf; if(tl==tr)return; int md=(tl+tr)>>1; build(v+v,tl,md); build(v+v+1,md+1,tr); } void upd(int pos,ll x,int v=1,int tl=1,int tr=(int)1e6){ if(tl==tr){ t[v]=min(x,t[v]); return; } int md=(tl+tr)>>1; if(pos<=md)upd(pos,x,v+v,tl,md); else upd(pos,x,v+v+1,md+1,tr); t[v]=min(t[v+v],t[v+v+1]); } void upd1(int pos,ll x,int v=1,int tl=1,int tr=(int)1e6){ if(tl==tr){ t1[v]=min(x,t1[v]); return; } int md=(tl+tr)>>1; if(pos<=md)upd1(pos,x,v+v,tl,md); else upd1(pos,x,v+v+1,md+1,tr); t1[v]=min(t1[v+v],t1[v+v+1]); } ll get(int l,int r,int v=1,int tl=1,int tr=(int)1e6){ if(tl>=l&&tr<=r)return t[v]; if(tl>r||l>tr)return inf; int md=(tl+tr)>>1; return min(get(l,r,v+v,tl,md),get(l,r,v+v+1,md+1,tr)); } ll get1(int l,int r,int v=1,int tl=1,int tr=(int)1e6){ if(tl>=l&&tr<=r)return t1[v]; if(tl>r||l>tr)return inf; int md=(tl+tr)>>1; return min(get1(l,r,v+v,tl,md),get1(l,r,v+v+1,md+1,tr)); } void Main(){ int n,k;cin>>n>>k; int x[n+3],y[n+3]; set<int>st; for(int i=1;i<=n;i++){ cin>>x[i]>>y[i]; st.insert(x[i]); st.insert(y[i]); } map<int,int>mp; int id=0; for(auto to:st)mp[to]=++id; if(k==1){ build(); ll ans=inf; for(int i=1;i<=n;i++){ if(i!=1){ ans=min({ans,get(1,mp[y[i]])+(ll)x[i]+(ll)y[i],get1(mp[y[i]],(int)1e6)+(ll)x[i]-(ll)y[i]}); } upd(mp[y[i]],-x[i]-y[i]); upd1(mp[y[i]],-x[i]+y[i]); } cout<<ans; return; } vector<ll>v; for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ v.push_back((ll)abs(x[i]-x[j])+(ll)abs(y[i]-y[j])); } } sort(v.begin(),v.end()); for(int i=0;i<k;i++)cout<<v[i]<<"\n"; } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0); int tt=1; // cin>>tt; while(tt--)Main(),cout<<"\n"; }
#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...