codevs 1135 选择客栈

时间:2023-03-08 21:23:20
codevs 1135 选择客栈

这题没什么话说。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 200500
using namespace std;
int n,k,p,pos[][maxn],cnt[maxn],r[maxn],col[maxn],val[maxn],pre[maxn],regis=;
long long ans=;
int ask(int col,int poss)
{
int l=,r=cnt[col],ans=;
while (l<=r)
{
int mid=(l+r)>>;
if (pos[col][mid]<=poss) {ans=mid;l=mid+;}
else r=mid-;
}
return pos[col][ans];
}
int main()
{
scanf("%d%d%d",&n,&k,&p);
for (int i=;i<=n;i++)
scanf("%d%d",&col[i],&val[i]);
for (int i=;i<=n;i++)
{
pos[col[i]][++cnt[col[i]]]=i;
r[i]=cnt[col[i]];
if (val[i]<=p) regis=i;
pre[i]=regis;
}
for (int i=;i<=n;i++)
{
if (r[i]==) continue;
if (pre[i]==i) ans+=r[i]-;
else
ans+=r[ask(col[i],pre[i])];
}
printf("%lld\n",ans);
return ;
}