BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心
Description
Input
Output
Sample Input
1 2 3 1 2 3
Sample Output
HINT
在第4次缺失时将3号单元换出Cache。
考虑x数某次出现的位置到它下一次出现的位置这段区间。
如果我想要让x不缺失,需要在这段区间里让x进入cache,相当于在这个区间(左开右开)塞一个数。
那么整个序列中,每个位置中最多能塞入m-1个数,因为x这个数已经在cache里了。
然后就变成了另一道题:http://www.cnblogs.com/suika/p/8711400.html
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 200050
#define ls p<<1
#define rs p<<1|1
int n,m;
int t[N<<2],add[N<<2],now[N],tot;
struct A {
int num,id,v;
}a[N];
struct node {
int l,r;
}b[N];
bool cmp1(const A &x,const A &y){return x.num<y.num;}
bool cmp2(const A &x,const A &y){return x.id<y.id;}
bool cmp3(const node &x,const node &y) {
if(x.r==y.r) return x.l>y.l;
return x.r<y.r;
}
void pushdown(int p) {
if(add[p]) {
int d=add[p];
add[ls]+=d; t[ls]+=d;
add[rs]+=d; t[rs]+=d;
add[p]=0;
}
}
void build(int l,int r,int p) {
t[p]=m-1;
if(l==r) {return ;}
int mid=(l+r)>>1;
build(l,mid,ls); build(mid+1,r,rs);
}
int query(int l,int r,int x,int y,int p) {
if(x<=l&&y>=r) return t[p];
int mid=(l+r)>>1,re=1<<30;
pushdown(p);
if(x<=mid) re=min(re,query(l,mid,x,y,ls));
if(y>mid) re=min(re,query(mid+1,r,x,y,rs));
t[p]=min(t[ls],t[rs]);
return re;
}
void update(int l,int r,int x,int y,int v,int p) {
if(x<=l&&y>=r) {
t[p]+=v; add[p]+=v;
return ;
}
pushdown(p);
int mid=(l+r)>>1;
if(x<=mid) update(l,mid,x,y,v,ls);
if(y>mid) update(mid+1,r,x,y,v,rs);
t[p]=min(t[ls],t[rs]);
}
int main() {
memset(t,0x3f,sizeof(t));
scanf("%d%d",&n,&m);
int i;
for(i=1;i<=n;i++) {
scanf("%d",&a[i].num); a[i].id=i;
}
sort(a+1,a+n+1,cmp1);
int j=0;a[0].num=1<<30;
for(i=1;i<=n;i++) {
if(a[i].num!=a[i-1].num)j++;
a[i].v=j;
}
sort(a+1,a+n+1,cmp2);
int ans=n;
for(i=n;i>=1;i--) {
if(now[a[i].v]) {
b[++tot].l=i+1;
b[tot].r=now[a[i].v]-1;
if(b[tot].l>b[tot].r) tot--,ans--;
}
now[a[i].v]=i;
}
sort(b+1,b+tot+1,cmp3);
build(1,n,1);
for(i=1;i<=tot;i++) {
int re=query(1,n,b[i].l,b[i].r,1);
if(re>=1) {
update(1,n,b[i].l,b[i].r,-1,1);
ans--;
}
}
printf("%d\n",ans);
}
BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心的更多相关文章
-
【BZOJ1826】[JSOI2010]缓存交换(贪心)
[BZOJ1826][JSOI2010]缓存交换(贪心) 题面 BZOJ 洛谷 题解 当缓存不满显然直接放进去,满了之后考虑拿走哪一个.不难发现拿走下一次出现时间最晚的那个一定不会更差. 那么用一个堆 ...
-
BZOJ_3252_攻略_线段树+dfs序
BZOJ_3252_攻略_线段树+dfs序 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏< ...
-
BZOJ_1828_[Usaco2010 Mar]balloc 农场分配_线段树
BZOJ_1828_[Usaco2010 Mar]balloc 农场分配_线段树 Description Input 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数 ...
-
1826: [JSOI2010]缓存交换
1826: [JSOI2010]缓存交换 https://www.lydsy.com/JudgeOnline/problem.php?id=1826 分析: 简单的贪心,然后调啊调...最近怎么了,码 ...
-
BZOJ_4636_蒟蒻的数列_线段树+动态开点
BZOJ_4636_蒟蒻的数列_线段树+动态开点 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将 ...
-
BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针
BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间, ...
-
BZOJ_2124_等差子序列_线段树+Hash
BZOJ_2124_等差子序列_线段树+Hash Description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pL ...
-
BZOJ_1798_[AHOI2009]维护序列_线段树
BZOJ_1798_[AHOI2009]维护序列_线段树 题意:老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: ( ...
-
BZOJ_3307_雨天的尾巴_线段树合并+树上差分
BZOJ_3307_雨天的尾巴_线段树合并 Description N个点,形成一个树状结构.有M次发放,每次选择两个点x,y 对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成 所有发放后 ...
随机推荐
-
在C#里面给PPT添加注释
平常开会或者做总结报告的时候我们通常都会用到PowerPoint演示文稿,我们可以在单个幻灯片或者全部幻灯片里面添加注释,这样观众可以从注释内容里面获取更多的相关信息. 有些朋友不清楚如何在幻灯片里面 ...
-
weblogic的下载安装及myeclipse的配置
weblogic的下载可以参考:http://jingyan.baidu.com/article/c910274b94e179cd371d2d7c.html 安装及myeclipse的配置参考:htt ...
-
drdb
Distributed Replicated Block Device(DRBD)是一种基于软件的,无共享,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像.DRBD工作在内 ...
-
smartgit document merge
'Normal' Merge In case of a normal merge, a merge commit with at least two parent commits (i.e., the ...
-
C# ACM poj1008
玛雅历 public static void Acm1008(int day, string mon, int year) { ; switch (mon) { case "pop" ...
-
idea构建spark开发环境,并本地运行wordcount
1.首先现在idea,官网:https://www.jetbrains.com/idea/ 2.安装jdk1.8,scala2.11 3.下载idea后,需要在idea中安装scala的插件,安装的方 ...
-
Django HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR
使用django来获取用户访问的IP地址,如果用户是正常情况下 request.META['REMOTE_ADDR'] 可以获得用户的IP地址.但是有些网站服务器会使用ngix等代理http,或者是该 ...
-
jquey 小记
1. $.each(array, [callback]) 遍历[常用] 解释: 不同于例遍jQuery对象的$().each()方法,此方法可用于例遍任何对象. 回调函数拥有两个参数: 第一个为对象的 ...
-
salt-api使用
salt-api 基本使用 目前salt API 支持的web模块如下: CherryPy Tornado WSGI 1.安装salt-api salt 使用 CherryPy来实现restful的a ...
-
poj3164最小树形图模板题
题目大意:给定一个有向图,根节点已知,求该有向图的最小树形图.最小树形图即有向图的最小生成树,定义为:选择一些边,使得根节点能够到达图中所有的节点,并使得选出的边的边权和最小. 题目算法:朱-刘算法( ...