求助dalao
我的思路:在输入时预处理,记录每个价格低于承受范围的咖啡馆以及其左边各种颜色的旅馆数量,再从右边往左推,选择最近的标记点并加入答案,直到检测到下一个点时更新为下个点,以此类推
求各位大佬指教
#include<bits/stdc++.h>
using namespace std;
int kind[51],book[200001][52]={0},a[200001];
int main(){
int n,k,p,num=0,ans=0,money;
cin>>n>>k>>p;
for(int i=1;i<=k;i++)
kind[i]=0;
for(int i=1;i<=n;i++){
cin>>a[i]>>money;
kind[a[i]]++;
if(money<=p){
num++;
book[num][51]=i;
for(int j=0;j<=k;j++)
book[num][j]=kind[j];
}
}
for(int i=n;i>=1;i--){
if(i==book[num][51])
num--;
ans+=book[num][a[i]];
if(num==0){
cout<<ans;
return 0;
}
}
return 0;
}
提前%%%%%%%%%%%%%%%%%%%%%%%