Pagini recente » Cod sursa (job #3202916) | Cod sursa (job #1662697) | Cod sursa (job #2350127) | Cod sursa (job #1018505) | Cod sursa (job #2689382)
#include <iostream>
#include <fstream>
#define sub first
#define r second
#define tsub first.second
#define index second.second
using namespace std;
const int NMAX = 100005;
ifstream fin("dezintegrare.in");
ofstream fout("dezintegrare.out");
long long N, Q, t;
pair < long long, long long > S[NMAX];
pair < long long, long long> T[NMAX];
long long tim, m_time;
long long new_idx;
long long nt;
int BS( int lf, int rg, int val )
{
if( lf > rg ) return 0;
int mid = lf + ( rg - lf )/2;
if( T[mid].first <= val ) return max( mid, BS( mid+1, rg, val ) );
else return BS( lf, mid-1, val );
}
void Solve()
{
fin >> N >> Q;
T[1].first = 0;
T[1].second =1;
nt = 1;
for( int i = 1; i <= N; ++i )
{
fin >> S[i].first >> S[i].second;
if( S[i].first < S[T[1].second].first )
T[1].second = i;
}
bool next = true;
while( next )
{
next = false;
m_time = ( 1 << 30 );
for( int i = 1; i <= N; ++i )
if( S[T[nt].second].r < S[i].r )
{
next = true;
tim = (S[i].sub - S[T[nt].second].sub )/( S[i].r - S[T[nt].second].r );
tim++;
//cout << time << ' ' << i << '\n';
if( tim < m_time || ( tim == m_time && 1LL* ( S[new_idx].sub-1LL* tim*S[new_idx].r) > 1LL* ( 1LL* S[i].sub - 1LL*tim*S[i].r) ))
{
m_time = tim;
new_idx = i;
}
}
if( next == false ) continue;
nt++;
T[nt] = make_pair( m_time, new_idx ) ;
}
//for( int i = 1; i <= nt; ++i )fout << T[i].first << ' ' << T[i].second << '\n';
for( int i = 1; i <= Q; ++i )
{
fin >> t;
fout << T[BS( 1, nt, t )].second<< '\n';
}
}
int main()
{
Solve();
return 0;
}