【BZOJ 1528】[POI2005]sam-Toy Cars 贪心+堆
2017-01-19 11:46
309 查看
很显然如果不够k的话就不用放回去,如果够了就需要放回去一个,这时候只要放回去的是之后用到的最远的一个就可以了,用一个nxt数组然后堆维护,最后就是弹出堆的时候需要判断一下这一个是否已经放回去了。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#define MK make_pair
#define maxn 500055
using namespace std;
int vis[maxn],nxt[maxn],m,a[maxn],k,n,last[maxn];
typedef pair<int,int>pii;
priority_queue<pii>q;
int main(){
scanf("%d%d%d",&m,&k,&n);
for(int i=1;i<=n;i++)scanf("%d",a+i),last[a[i]]=n+1;
for(int i=n;i>=1;i--){
nxt[i]=last[a[i]];
last[a[i]]=i;
}
int ans=0;
for(int i=1;i<=n;i++){
if(vis[a[i]]){q.push(MK(nxt[i],a[i]));}
else if(k){
k--,ans++;
vis[a[i]]=1;
q.push(MK(nxt[i],a[i]));
}else{
while(!vis[q.top().second])q.pop();
int x=q.top().second;q.pop();
vis[x]=0,ans++,vis[a[i]]=1;
q.push(MK(nxt[i],a[i]));
}
}
printf("%d",ans);
return 0;
}
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#define MK make_pair
#define maxn 500055
using namespace std;
int vis[maxn],nxt[maxn],m,a[maxn],k,n,last[maxn];
typedef pair<int,int>pii;
priority_queue<pii>q;
int main(){
scanf("%d%d%d",&m,&k,&n);
for(int i=1;i<=n;i++)scanf("%d",a+i),last[a[i]]=n+1;
for(int i=n;i>=1;i--){
nxt[i]=last[a[i]];
last[a[i]]=i;
}
int ans=0;
for(int i=1;i<=n;i++){
if(vis[a[i]]){q.push(MK(nxt[i],a[i]));}
else if(k){
k--,ans++;
vis[a[i]]=1;
q.push(MK(nxt[i],a[i]));
}else{
while(!vis[q.top().second])q.pop();
int x=q.top().second;q.pop();
vis[x]=0,ans++,vis[a[i]]=1;
q.push(MK(nxt[i],a[i]));
}
}
printf("%d",ans);
return 0;
}
相关文章推荐
- bzoj1528 [POI2005]sam-Toy Cars
- 【BZOJ 1528】 1528: [POI2005]sam-Toy Cars (贪心+堆)
- BZOJ1528 [POI2005]sam-Toy Cars
- 【BZOJ1528】[POI2005]sam-Toy Cars 贪心
- BZOJ 1528 POI2005 sam-Toy Cars 堆+贪心
- 【bzoj1528】[POI2005]sam-Toy Cars
- BZOJ 1528 [POI2005]sam-Toy Cars(优先队列)
- 【bzoj1528】 [POI2005]sam-Toy Cars
- [BZOJ1528][POI2005]sam-Toy Cars(贪心)
- bzoj 1528: [POI2005]sam-Toy Cars
- BZOJ1528: [POI2005]sam-Toy Cars
- 【BZOJ】1535: [POI2005]Sza-Template
- Bzoj 1532: [POI2005]Kos-Dicing 二分,网络流
- BZOJ 1529: [POI2005]ska Piggy banks
- bzoj2555: SubString SAM+LCT
- bzoj1529: [POI2005]ska Piggy banks
- bzoj1534: [POI2005]Sum- Fibonacci sums
- 【bzoj1531】[POI2005]Bank notes 多重背包dp
- BZOJ153/POI2005 A Journey to Mars
- bzoj1529 [POI2005]ska Piggy banks(并查集)