1 条题解

  • 0
    @ 2025-9-10 8:48:32

    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

    信息

    ID
    3318
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者