Submission #1157830

#TimeUsernameProblemLanguageResultExecution timeMemory
1157830dibamboo23Road Construction (JOI21_road_construction)C++20
12 / 100
2499 ms2151736 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)); } int x[N],y[N]; bool cmp(int i,int j){ return x[i]<x[j]; } void Main(){ int n,k;cin>>n>>k; set<int>st; vector<int>pos; for(int i=1;i<=n;i++){ cin>>x[i]>>y[i]; st.insert(x[i]); st.insert(y[i]); pos.push_back(i); } map<int,int>mp; int id=0; for(auto to:st)mp[to]=++id; if(k==1){ build(); sort(pos.begin(),pos.end(),cmp); ll ans=inf; int id=0; for(auto i:pos){ if(id!=0){ 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]}); } id++; upd(mp[y[i]],-x[i]-y[i]); upd1(mp[y[i]],y[i]-x[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...