博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1528[POI2005]sam-Toy Cars*&&bzoj1826[JSOI2010]缓存交换
阅读量:6364 次
发布时间:2019-06-23

本文共 1201 字,大约阅读时间需要 4 分钟。

题意:

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

题解:

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

代码(1528):

1 #include 
2 #include
3 #include
4 #include
5 #include
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
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

 

20161109

转载于:https://www.cnblogs.com/YuanZiming/p/6052623.html

你可能感兴趣的文章
太多脚本将会毁掉持续交付
查看>>
一地鸡毛 OR 绝地反击,2019年区块链发展指南
查看>>
C# 8新提案让泛型Attribute成为现实
查看>>
ASP.NET Core:简洁的力量
查看>>
关于AWS的Firecracker,技术人应该知道的十件事
查看>>
卢森堡大学发布RepuCoin系统,可破解区块链51%攻击
查看>>
国内云计算厂商众生相:四大阵营十几家企业生存盘点
查看>>
细说Unicode(一) Unicode初认识
查看>>
Node.js有了新的管理者
查看>>
虚拟研讨会:.NET的未来在哪里?
查看>>
Java 20年:历史与未来
查看>>
彻底理解Javascript中的原型链与继承
查看>>
2017 Vue.js 2快速入门指南
查看>>
REST是新SOAP?
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
美国国会为苹果和FBI举行了听证会
查看>>
gRPC-Web发布,REST又要被干掉了?
查看>>
如何:强化 TCP/IP 堆栈安全
查看>>
Spring3 MVC中使用Swagger生成API文档
查看>>
FastCGI PHP on Windows Server 2003
查看>>