绿题就是这么简单
CCF_zkskyer · · 题解
第一篇绿题题解
首先,读题可以发现,这道题相对于P1311 选择客栈唯一的差别就是数据范围大了,未加强过的题目可以用那么恭喜您,找对题解了!
来说一下思路,既然是
大致思路是这样的:循环一层
三个关键数组
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=200005;
long long n,k,p;
long long col,pri;
long long aft[maxn],tot[maxn],numb[maxn],bef;
long long ans;
int main()
{
//freopen("hotel.in","r",stdin); 这里由于是考试时打的,
//freopen("hotel.out","w",stdout); 所以用了文件输入输出
scanf("%lld%lld%lld",&n,&k,&p);
for (register int i=1;i<=n;++i)
{
scanf("%lld%lld",&col,&pri); //再循环内输入,节约一点点时间
if (pri<=p) bef=i; //满足就赋值
if (bef>=aft[col]) tot[col]=numb[col]; //最大值重新命值
ans+=tot[col]; //答案加上暂时储存
aft[col]=i; //最后客栈位置也要改变
numb[col]++; //暂时储存的加上一
}
printf("%lld",ans); // 愉快的输出
return 0;
}
希望对大家有帮助