【bzoj1528】 [POI2005]sam-Toy Cars
来源:互联网 发布:kol粉丝数据分析 编辑:程序博客网 时间:2024/05/23 12:51
Description
Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Jasio 拿不到它们. 为了让他的房间有足够的空间,在任何时刻地板上都不会有超过k 个玩具. Jasio 在地板上玩玩具. Jasio'的妈妈则在房间里陪他的儿子. 当Jasio 想玩地板上的其他玩具时,他会自己去拿,如果他想玩的玩具在架子上,他的妈妈则会帮他去拿,当她拿玩具的时候,顺便也会将一个地板上的玩具放上架子使得地板上有足够的空间.他的妈妈很清楚自己的孩子所以他能够预料到Jasio 想玩些什么玩具. 所以她想尽量的使自己去架子上拿玩具的次数尽量的少,应该怎么安排放玩具的顺序呢?
Input
第一行三个整数: n, k, p (1 <= k <= n <= 100.000, 1 <= p <= 500.000), 分别表示玩具的总数,地板上玩具的最多个数以及Jasio 他想玩玩具的序列的个数,接下来p行每行描述一个玩具编号表示Jasio 想玩的玩具.
Output
一个数表示Jasio 的妈妈最少要拿多少次玩具.
Sample Input
3 2 7
1
2
3
1
3
1
2
1
2
3
1
3
1
2
Sample Output
4
Solve
线段树+贪心,每次拿掉下一侧出现最远的
#include<iostream>#include<cstdlib>#include<cstdio>#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1using namespace std;const int N=500005;int a[N],la[N],ne[N];int m,p,s,jc;bool flag[N];struct node{ int val,wz;}t[N<<2],ans;inline node Max(node i,node j){ if (i.val>j.val)return i; else return j;}void update(int l,int r,int rt,int i,int j){ if (l==r){ t[rt].wz=i; t[rt].val=j; return; } int mid=(l+r)>>1; if (i<=mid)update(lson,i,j); else update(rson,i,j); t[rt]=Max(t[rt<<1],t[rt<<1|1]);}node query(int l,int r,int rt,int L,int R){ if (L<=l && r<=R)return t[rt]; int mid=(l+r)>>1; if (R<=mid)return query(lson,L,R); else if (mid<l)return query(rson,L,R); else return Max(query(lson,L,R),query(rson,L,R));}int main (){ scanf ("%*d%d%d",&m,&p); for (int i=1;i<=p;++i){ scanf ("%d",&a[i]); ne[i]=p+1; la[a[i]]=(ne[la[a[i]]]=i); if (s==m)continue; if (!flag[a[i]])flag[a[i]]=++s; if (s==m)jc=i+1; } for (int i=1;i<=p;++i) update(1,p,1,i,ne[i]); for (int i=jc;i<=p;++i){ if (flag[a[i]])continue; flag[a[i]]=++s; ans=query(1,p,1,1,i-1); flag[a[ans.wz]]=0; update(1,p,1,ans.wz,0); } printf ("%d",s); return 0;}
阅读全文
0 0
- 【bzoj1528】 [POI2005]sam-Toy Cars
- 【bzoj1528】[POI2005]sam-Toy Cars
- [bzoj1528/POI2005]sam-Toy Cars---贪心+堆
- bzoj 1528: [POI2005]sam-Toy Cars
- BZOJ 1528 POI2005 sam-Toy Cars 堆+贪心
- 【BZOJ 1528】[POI2005]sam-Toy Cars 贪心+堆
- A. Toy Cars
- 周赛-Toy Cars
- A. Toy Cars
- CodeForces 303A Toy Cars
- Toy Cars (周赛2)
- BOZJ1528/POI 2005Toy Cars
- codeforces #303 div2 A. Toy Cars
- Codeforces Round #303 A. Toy Cars
- CodeForces - 545A Toy Cars (模拟)
- contest: Codeforces Round #303 (Div. 2), problem: (A) Toy Cars
- Codeforces Round #303 (Div.2)-A. Toy Cars(模拟)
- sam
- FreeRTOS
- 如何快速了解github,并将本地代码上传
- 伯德图
- vector和arraylist
- html中表单提交注意事项
- 【bzoj1528】 [POI2005]sam-Toy Cars
- Spring boot下使用Quartz--多实例解决方案
- PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别
- linux 安装mysql和主从配置 + Spring 基于注解配置mysql读写分离
- Java基础之方法学习
- JAVA调用DLL -- JNA和Fat Jar的使用及打包问题(一)
- 解读opentsdb之aggregator
- git和SVN的区别
- 输出二叉树中叶子结点的个数