You are on page 1of 3

//#include <bits/stdc++.

h>
//
//using namespace std;
//
//ifstream f("ramen.in");
//ofstream g("ramen.out");
//
//const int N = (1<<17)+10;
//const int infinit = 1<<30;
//
//int n, T, tp[N], po[N], x[N], i, z, sol[N],tmax[2*N],tmin[2*N],cauta(int,int);
//
//bool crit(int u,int v){return make_pair(po[u],tp[u])<=make_pair(po[v],tp[v]);}
//
//int main()
//{
// f >> n >> T;
//
// for(i = 1; i <= n; i++)
// {
// f >> tp[i] >> po[i];
// x[i]=i;
// }
// sort(x+1,x+n+1,crit);
// z=1;while(z<n)z*=2;
// z--;
// for(i=1;i<=n;i++)tmax[z+i]=tp[i]+T;
// sort(tmax+z+1,tmax+z+n+1);
// copy(tmax+z+1,tmax+z+n+1,tmin+z+1);
// for(i=z;i>=1;i--){tmin[i]=tmin[2*i];tmax[i]=tmax[2*i+1];}
// for(i=1;i<=n;i++)
// sol[x[i]]=cauta(1,tp[x[i]]-po[x[i]])+po[x[i]];
// for(i=1;i<=n;i++)
// g<<sol[i]<<'\n';
// return 0;
//}
//int cauta(int nod,int timp)
//{
// int st,dr,ret;
// if(!tmin[nod])return infinit;
// if(tmax[nod]==tmin[nod])
// {
// ret=tmax[nod];
// tmax[nod]=tmin[nod]=0;
// return ret;
// }
// st=2*nod;dr=st+1;
// if(!tmin[st])
// {
// ret=cauta(dr,timp);
// tmin[nod]=tmin[dr];
// tmax[nod]=tmax[dr];
// return ret;
// }
// if(!tmin[dr])
// {
// ret=cauta(st,timp);
// tmin[nod]=tmin[st];
// tmax[nod]=tmax[dr];
// return ret;
// }
// if(tmax[st]>=timp)
// ret=cauta(st,timp);
// else
// ret=cauta(dr,timp);
// if(!tmin[st]){tmin[nod]=tmin[dr];tmax[nod]=tmax[dr];}else
// if(!tmin[dr]){tmin[nod]=tmin[st];tmax[nod]=tmax[st];}else
// {tmin[nod]=tmin[st];tmax[nod]=tmax[dr];}
// return ret;
//}
#include <bits/stdc++.h>

using namespace std;

ifstream f("ramen.in");
ofstream g("ramen.out");

const int N = 100010;

int n, T, tp, po, i, sol[N];


set< tuple < int, int, int > > clienti;
set< int > farfurii;

int main()
{
f >> n >> T;

for(i = 1; i <= n; i++)


{
f >> tp >> po;
clienti.insert(make_tuple(po, tp, i));
farfurii.insert(tp);
}
for(auto it:clienti)
{
tie(po, tp, i)=it;
set<int>::iterator IT = farfurii.lower_bound(tp - po - T);
sol[i] = *IT + T + po;
farfurii.erase(*IT);
}

for(i = 1; i <= n; i++)


g << sol[i] <<'\n';

return 0;
}
#include <fstream>
#include<set>
#include<tuple>
using namespace std;
ifstream fin("ramen.in");
ofstream fout("ramen.out");
set<int> f;
set<tuple<int,int,int> > a;
int n,d,timp,poz,i,sol[100005];
int main(){
fin>>n>>d;
for(i=1;i<=n;i++){
fin>>timp>>poz;
a.insert(make_tuple(poz,timp,i));
f.insert(timp);
}
fin.close();
set<tuple<int,int,int> >::iterator it;
set<int>::iterator jt;
for(it=a.begin();it!=a.end();it++){
tie(poz,timp,i)=*it;
jt=f.lower_bound(timp-poz-d);
sol[i]=*jt+poz+d;
f.erase(*jt);
}
for(i=1;i<=n;i++)
fout<<sol[i]<<'\n';
fout.close();
return 0;
}