#include #include using namespace std; pair s[100010]; pair travel[100010]; float interval[100010]; int used[100010]; int np[100010]; int out[100010]; pair fin[100010]; pair coords[100010]; struct points { float x,y; int ind; }p[100010]; struct side { float val; int x1,x2; }; vector sides; bool comp(points a, points b) { if(a.x!=b.x)return a.x a, pair b) { if(a.first>b.first)return a.first>b.first; else return a.second>b.second; } int place(int ind, float &maxx) { sort(sides.begin(),sides.end(),comp2); reverse(sides.begin(),sides.end()); float v = sides[0].val; int x1 = sides[0].x1; int x2 = sides[0].x2; float dist1,best=INT_MAX,ls,rs,big,bls,brs; side NL,NR; int pos; dist1=interval[x1-1]; for(int i=x1;i<=x2;i++) { ls=dist1-interval[i-1]; rs=v-ls; big=max(ls,rs); if(maxx-big,int> findnearest(int ind, int n) { int prev=ind,next=ind; float dp=0,dn=0; short ans; pair,int> res; while(1) { if(prev>0){prev--;dp+=interval[prev];} if(next>n>>k;*/ FILE *F; F=fopen("runners.in","rt"); fscanf(F,"%d %d",&n,&k); for(int i=1;i<=k;i++){fscanf(F,"%f",&s[i].first);s[i].second=i;travel[i].second=i;} for(int i=0;iright); for(int i=2;i<=k;i++) { int pos=place(i,maxx); used[pos]=i; coords[i]={p[pos].x,p[pos].y}; } //calculate wait time for(int q=0;q,int> near=findnearest(i,n); int id=near.first.first; float dist=near.first.second; int person=near.second; used[id]=0; used[i]=person; out[q]=person; travel[person].first+=dist; } else out[q]=used[i]; } sort(travel+1,travel+k+1,comp3); sort(s+1,s+k+1,comp3); for(int i=1;i<=k;i++) { int h=travel[i].second; int num=s[i].second; fin[num]=coords[h]; } fclose(F); F = fopen("runners.out","wt"); for(int i=1;i<=k;i++) { fprintf(F,"%d %d\n",fin[i].first,fin[i].second); } for(int i=0;i