当出现了一个消费小于p的咖啡店时,这个客栈之前所有与他相同颜色的客栈都可以组成答案。
用last[]表示某个颜色的最后出现位置,用tot[]表示某个颜色一共有多少个客栈,sum[]表示对于某个颜色,目前可选的客栈数量,now表示目前消费小于p的最后一个咖啡店
当出现了一个咖啡店,消费小于p,并且位置比最后一个i颜色咖啡店靠后,就可以把这个咖啡店前面所有的i颜色客栈都算到sum数组中,即sum[i] = tot[i]
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
#define debug(x) cerr << #x << "=" << x << endl;
const int MAXK = 110;
int n,k,p,now,last[MAXK],tot[MAXK],sum[MAXK],ans;
int main() {
cin >> n >> k >> p;
for(int i=1; i<=n; i++) {
int col, price;
cin >> col >> price;
if(price <= p)
now = i;
if(now >= last[col])
sum[col] = tot[col];
last[col] = i;
ans += sum[col];
tot[col]++;
}
cout << ans;
return 0;
}