记录编号 461687 评测结果 AAAAAAAAAA
题目名称 [NOIP 2011]选择客栈 最终得分 100
用户昵称 GravatarFuryton 是否通过 通过
代码语言 C++ 运行时间 0.183 s
提交时间 2017-10-20 12:15:37 内存使用 49.91 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define File(x) "hotel."#x
#define For(i,s,e) for(int i=(s); i<=(e); i++)
#define Rep(i,s,e) for(int i=(s); i>=(e); i--)
#define ab(x) ((x)<0?-(x):(x))
#define Max(x,y) (x)=((x)<(y)?(y):(x))
using namespace std;

const int N=200000+10;

int n,k,p,color[N],cost[N];
int sum[N],last_c[N],pre[N],sum_c[N][60],ans;

int main()
{
	freopen(File(in),"r",stdin);
	freopen(File(out),"w",stdout);

	scanf("%d%d%d",&n,&k,&p);
	For(i,1,n)
	{
		scanf("%d%d",&color[i],&cost[i]);
		if(cost[i]<=p) sum[i]=sum[i-1]+1;
		else sum[i]=sum[i-1];
		pre[i]=last_c[color[i]];
		last_c[color[i]]=i;
		sum_c[i][color[i]]=sum_c[pre[i]][color[i]]+1;

		int p=pre[i];
		while(p)
		{
			if(sum[i]-sum[p-1]==0) p=pre[p];
			else break;
		}
		if(p) ans+=sum_c[p][color[i]];
	}
	
	cout<<ans<<endl;

	return 0;
}