题解:P1311 [NOIP2011 提高组] 选择客栈
思路
枚举靠左边的那个客栈,考虑对于左边的客栈为
发现如果没有咖啡店这个限制,那么答案就是
但是有咖啡店这个限制,也就是两个客栈之间至少要有一个咖啡店的消费小于
然后这道题就变成了查询在
注意,两个人不能选择同一个客栈,当
时间复杂度为
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
int n,k,p;
ll ans;
int a[maxn],b[maxn];
int sum[maxn][55];
int c[maxn];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>k>>p;
for(int i=1;i<=n;i++)cin>>a[i]>>b[i];
for(int i=n;i>0;i--)
for(int j=0;j<k;j++){
sum[i][j]=sum[i+1][j]+(a[i]==j);
c[i]=(b[i]<=p?i:c[i+1]);
}
for(int i=1;i<=n;i++)
ans+=sum[(c[i]==i?c[i]+1:c[i])][a[i]];//要特判
cout<<ans;
return 0;
}