Pagini recente » Cod sursa (job #2070133) | Cod sursa (job #99950) | Cod sursa (job #2554948) | Cod sursa (job #616518) | Cod sursa (job #1401403)
#include<iostream>
#include<fstream>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
ifstream f("heavymetal.in");
ofstream g("heavymetal.out");
int dp[2][100005];
vector <pair <int,int> > a;
int n;
void citire()
{
int i,x,y;
f>>n;
for(i=1;i<=n;i++){
f>>x>>y;
a.push_back(make_pair(y,x));
}
sort(a.begin(),a.end());
}
int cautare(int x, int ind)
{
int mid,st=0,dr=ind;
mid=(st+dr)/2;
while(st <= dr){
if(dp[1][mid] <= x)
st = mid + 1;
else
dr = mid - 1;
mid = (st+dr)/2;
}
return mid;
}
void rez()
{
int i,j,durata,orai,oraf;
dp[0][1] = a[0].first - a[0].second;
dp[1][1] = a[0].first;
for(i=2; i<=n; i++){
orai = a[i-1].second;
oraf = a[i-1].first;
durata = a[i-1].first - a[i-1].second;
j = cautare(orai, i-1);
if(dp[0][i-1] > dp[0][j] + durata){
dp[1][i] = dp[1][i-1];
dp[0][i] = dp[0][i-1];
}
else{
dp[1][i] = oraf;
dp[0][i] = dp[0][j] + durata;
}
}
g<<dp[0][n]<<"\n";
}
int main()
{
citire();
rez();
return 0;
}