记录编号 159971 评测结果 AAAAAAAAAAAAAA
题目名称 奶牛跑步2 最终得分 100
用户昵称 GravatarTAT 是否通过 通过
代码语言 C++ 运行时间 0.614 s
提交时间 2015-04-23 14:40:53 内存使用 0.95 MiB
显示代码纯文本
#include<cstdio>
#include<cstdlib>
struct node{
	node *c[2];
	int val,siz;
	long long key;
	node(){
        key=val=siz=0;
		c[0]=c[1]=NULL;
	}
	void update(){
		siz=c[0]->siz+c[1]->siz+1;
	}
	node(const long long &x);
};
node *Null=new node,*root=Null,*tmp;
node::node(const long long &x){
	key=x,val=rand(),siz=1;
	c[0]=c[1]=Null;
}
void rot(node *&o,const bool &d){
	tmp=o->c[!d],o->c[!d]=tmp->c[d],tmp->c[d]=o;
	tmp->siz=o->siz,o->update(),o=tmp;
}
void ins(node *&o,const long long &x){
	if(o==Null){
		o=new node(x);
		return;
	}
	bool d=(x>=o->key);
	ins(o->c[d],x),o->siz++;
	if(o->c[d]->val<o->val) rot(o,!d);
}
void del(node *&o,const long long &x){
	if(o->key==x){
		if(o->c[0]==Null) {o=o->c[1];return;}
		if(o->c[1]==Null) {o=o->c[0];return;}
		bool d=(o->c[0]->val<o->c[1]->val);
		rot(o,d),del(o->c[d],x);
	}
	else del(o->c[(x>=o->key)],x);
	o->siz--;
}
long long suc(const long long &x){
	static long long res;
	res=-1,tmp=root;
	while(tmp!=Null){
		if(tmp->key>x) res=tmp->key,tmp=tmp->c[0];
		else tmp=tmp->c[1];
	}
	return res;
}
int main(){
    freopen("cowjogb.in","r",stdin);
	freopen("cowjogb.out","w",stdout);
	srand(19990214);
	int n,v,m=0;
	long long t,p[100000];
	scanf("%d%lld",&n,&t);
	for(int i=0;i<n;i++)
	    scanf("%lld%d",&p[i],&v),p[i]+=t*v;
	for(int i=n-1;~i;i--){
		long long now=suc(p[i]);
		if(now!=-1) del(root,now);
		else m++;
		ins(root,p[i]);
	}
	printf("%d\n",m);
	return 0;
}