1 solutions
-
0
C++ :
#define MAXN 500010UL #define MAXL 100010UL #include <cstdio> #include <queue> #include <deque> std::deque<int> q[MAXL]; struct Point{ int id,d; friend bool operator < (Point a,Point b){ return a.d<b.d; } }; std::priority_queue<Point> que; int n,k,p,lis[MAXN],Ans,rs; bool ex[MAXL]; int main(){ scanf("%d%d%d",&n,&k,&p); for(int i=1;i<=p;i++) scanf("%d",&lis[i]),q[lis[i]].push_back(i); for(int i=1;i<=n;i++) q[i].push_back(0x2ffffff); for(int i=1,a;i<=p;i++){ a=lis[i]; if(!ex[a]){ Ans++; if(rs==k){ while(!ex[que.top().id]) que.pop(); ex[que.top().id]=false;rs--;que.pop(); } rs++; } q[a].pop_front(); Point temp;ex[a]=true; temp.id=a; temp.d=q[a].front(); que.push(temp); } printf("%d",Ans); return 0; }
- 1
Information
- ID
- 18567
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By