记录编号 |
461687 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2011]选择客栈 |
最终得分 |
100 |
用户昵称 |
Furyton |
是否通过 |
通过 |
代码语言 |
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;
}