1 solutions

  • 0
    @ 2025-11-5 17:34:38

    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