C++0分玄关求助
查看原帖
C++0分玄关求助
690669
Beacon_wolf楼主2024/4/16 14:52
#include <bits/stdc++.h>
using namespace std;
int n,k;
set<int> st; //st里储存每堆牌顶的牌
vector< vector<int> > c(100010); //c里储存每堆牌堆各有的牌 
int main(){
	cin >> n >> k;
	vector<int> p(n); //p里储存输入的牌 
    vector<int> ans(n,-1);
	for(int i = 1;i <= n;i++) cin >> p[i];
	for(int i = 1;i <= n;i++){
		auto itr = st.lower_bound(p[i]);
		if(itr == st.end()){ //所有牌顶上都没有比它小的牌,则自成一个牌堆 
			c[p[i]].push_back(p[i]);
			st.insert(p[i]);
		}else{ //有牌顶上有比它小的牌,则将此张牌放到这堆牌的牌顶 
			int x = *itr;
			c[x].push_back(p[i]);
            swap(c[x],c[p[i]]);
			st.erase(itr);
			st.insert(p[i]);
		} 
		if(c[p[i]].size() >= k){ //达到吃掉牌的要求 
			for(auto l : c[p[i]]) ans[l] = i; //储存答案 
			c[p[i]].clear();
			st.erase(p[i]);
		} 
	}
	for(int i = 1;i <= n;i++){
		cout << ans[i] << endl;
	} 
    return 0;
}
2024/4/16 14:52
加载中...