哇哈

heyucheng 2023-04-04 20:26:07 2023-10-14 10:49:43 21 返回题目

#include<bits/stdc++.h>
using namespace std;

struct node{
    int num;
    int col;
};

int dp[2000010],col[2000010],num[100000],last[100000];
bool can[2000010];
node can_last;

int main()
{
    int n,k,p;
    cin>>n>>k>>p;
    for(int i=1;i<=n;i++)
    {
        int s;
        cin>>col[i]>>s;
        if(s<=p) can[i]=1;
    }
    for(int i=1;i<=n;i++)
    {
        int k=col[i];
        if(can[i]) dp[i]=num[k];
        else if(can_last.num>=last[k]&&can_last.num) dp[i]=num[k];
        else dp[i]=dp[last[k]];
        last[k]=i;
        if(can[i])
        {
            can_last.num=i;
            can_last.col=k;
        }   
        num[k]++;
    }
    long long ans=0;
    for(int i=1;i<=n;i++)
    {
        ans+=dp[i];
    }
    cout<<ans<<endl;
    return 0;
}
{{ vote && vote.total.up }}