1 条题解
-
12
废话不多说,上代码!!!
#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
- 上传者