码迷,mamicode.com
首页 > Web开发 > 详细

bzoj1528[POI2005]sam-Toy Cars*&&bzoj1826[JSOI2010]缓存交换

时间:2016-11-11 19:59:44      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:main   getc   inline   for   自己   上架   cst   algorithm   ref   

bzoj1528[POI2005]sam-Toy Cars

bzoj1826[JSOI2010]缓存交换

题意:

Jasio有n个不同的玩具,它们都被放在了很高的架子上,地板上不会有超过k个玩具。当Jasio想玩地板上的其他玩具时,他会自己去拿,如果他想玩的玩具在架子上,他的妈妈则会帮他去拿,当她拿玩具的时候,顺便也会将一个地板上的玩具放上架子使得地板上有足够的空间。他的妈妈知道孩子的p个请求,求通过决定每次换玩具时换下哪个所能使他妈妈架子上拿玩具的次数的最小值。k≤100000,p≤500000。bzoj1826中的玩具种类需离散化。

题解:

首先求出每个请求的下一次对同种类玩具的请求的位置。之后维护一个优先队列求当前地板上玩具的下次请求位置,每次换玩具时把下次请求位置最大的弹出。

代码(1528):

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <queue>
 5 #include <set>
 6 #define inc(i,j,k) for(int i=j;i<=k;i++)
 7 #define maxn 500010
 8 #define INF 0x3fffffff
 9 using namespace std;
10 
11 inline int read(){
12     char ch=getchar(); int f=1,x=0;
13     while(ch<0||ch>9){if(ch==-)f=-1; ch=getchar();}
14     while(ch>=0&&ch<=9)x=x*10+ch-0,ch=getchar();
15     return f*x;
16 }
17 struct nd{
18     int v,id; bool operator < (const nd&a)const{return v<a.v;}
19 };
20 priority_queue<nd>q;
21 int n,k,p,a[maxn],next[maxn],tot,ans,last[maxn]; bool zsye[maxn];
22 int main(){
23     n=read(); k=read(); p=read(); inc(i,1,p)a[i]=read();
24     inc(i,1,n)last[i]=p+1; for(int i=p;i>=1;i--)next[i]=last[a[i]],last[a[i]]=i;
25     inc(i,1,p){
26         if(!zsye[a[i]]){
27             if(tot<k){
28                 zsye[a[i]]=1; ans++; tot++;
29                 if(next[i])q.push((nd){next[i],a[i]});else q.push((nd){p+1,a[i]});
30             }else{
31                 zsye[a[i]]=1; ans++; nd x=q.top(); q.pop(); zsye[x.id]=0;
32                 if(next[i])q.push((nd){next[i],a[i]});else q.push((nd){p+1,a[i]});
33             }
34         }else{
35             q.push((nd){next[i],a[i]});
36         }    
37     }
38     printf("%d",ans); return 0;
39 }

 

20161109

bzoj1528[POI2005]sam-Toy Cars*&&bzoj1826[JSOI2010]缓存交换

标签:main   getc   inline   for   自己   上架   cst   algorithm   ref   

原文地址:http://www.cnblogs.com/YuanZiming/p/6052623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!