#include using namespace std; int find(vector T,int value){ int min=-1; int max=T.size(); int mid; while(max-min>1){ mid=(max+min)/2; if(T[mid]>value){ max=mid; }else{ min=mid; } } return min; } long long calc(vector T,vector D,int K){ if(T.size()==0){ return 0; } vector dp(T.size()); long long sum=0; int ind; for(int i=0;i>N>>K; vector T(N),D(N); for(int i=0;i>T[i]>>D[i]; } int m=-1; int M=1000000001; int mid; int prev; while(M-m>1){ mid=(m+M)/2; prev=-K; for(int i=0;i isUsed(N); int pointer; for(int i=0;iM){ isUsed[i]=true; pointer=i-1; while(pointer>=0 && !isUsed[pointer] && T[i]-T[pointer] tempT(0),tempD(0); long long ans=0; for(int i=0;i