1 条题解

  • 12
    @ 2023-8-5 22:52:29

    废话不多说,上代码!!!

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    
    using namespace std;
    
    #define LL long long
    #define N 500010
    #define M 100010
    
    int n,k,p,a[N];
    int nxt[N],ans;
    bool vis[M];
    
    struct cmp {
        inline bool operator() (const int &a,const int &b) {
            return nxt[a] < nxt[b];
        }
    };
    queue <int> q1[M];
    priority_queue <int,vector<int>,cmp> q2;
    
    int main() {
        scanf("%d%d%d",&n,&k,&p);
        for(int i = 1 ; i <= p ; i++) {
            scanf("%d",&a[i]);
            q1[a[i]].push(i);
        }
        for(int i = 1 ; i <= p ; i++) {
            q1[a[i]].pop();
            if(q1[a[i]].empty()) nxt[i] = p + 1;
            else nxt[i] = q1[a[i]].front();
        }
        for(int i = 1 ; i <= p ; i++) {
            if(!vis[a[i]]) {
                if(q2.size() == k) {
                    vis[a[q2.top()]] = 0;
                    q2.pop();
                }
                q2.push(i); 
                vis[a[i]] = 1; 
                ans++;
            }
            else q2.push(i), k++;
        }
        printf("%d \n",ans);
        //system("pause");
        return 0;
    }
    
    
  • 1

信息

ID
1883
时间
1000ms
内存
256MiB
难度
1
标签
递交数
131
已通过
86
上传者