[POI2008]KLO-Building blocks

时间:2023-02-11 15:22:09

题目描述

N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另一柱.仓库无限大. 现在希望用最小次数的动作完成任务.你还要求输出结束状态时,每柱砖的高度。

Solution

这题相当于我们滑动一个大小为k的窗口,我们可以任意改动每摞砖的高度,那么最优高度为多少呢,很显然是中位数。

所以这题变成了一道大水题,维护一个数据结构,支持插入,删除,查K大。

Code

#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 100004
using namespace std;
int n,a[N],num[N<<],k,top,jue;
long long tr[N<<],ans=0x7f7f7f7f,b[N],ansn;
long long q(int cnt,int l,int r,int L,int R){
if(L>R)return ;
if(l>=L&&r<=R)return tr[cnt];
int mid=(l+r)>>;
long long ans=;
if(mid>=L)ans+=q(cnt<<,l,mid,L,R);
if(mid<R)ans+=q(cnt<<|,mid+,r,L,R);
return ans;
}
int qsum(int cnt,int l,int r,int L,int R){
if(L>R)return ;
if(l>=L&&r<=R)return num[cnt];
int mid=(l+r)>>;
int ans=;
if(mid>=L)ans+=qsum(cnt<<,l,mid,L,R);
if(mid<R)ans+=qsum(cnt<<|,mid+,r,L,R);
return ans;
}
void add(int cnt,int l,int r,int x,int tag){
if(l==r){tr[cnt]+=b[x]*tag;num[cnt]+=tag;return;}
int mid=(l+r)>>;
if(mid>=x)add(cnt<<,l,mid,x,tag);
else add(cnt<<|,mid+,r,x,tag);
tr[cnt]=tr[cnt<<]+tr[cnt<<|];
num[cnt]=num[cnt<<]+num[cnt<<|];
}
int find(int cnt,int l,int r,int k){
if(l==r)return l;
int mid=(l+r)>>;
if(num[cnt<<]>=k)return find(cnt<<,l,mid,k);
else return find(cnt<<|,mid+,r,k-num[cnt<<]);
}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=n;++i)scanf("%d",&a[i]),b[i]=a[i];
sort(b+,b+n+);
top=unique(b+,b+n+)-b-;
for(int i=;i<=n;++i)a[i]=lower_bound(b+,b+top+,a[i])-b;
for(int i=;i<=k;++i)add(,,top,a[i],);
ans=2e18;
long long sum=(k+)/;
for(int i=k;i<=n;++i){
int x=find(,,top,sum);
long long aa=b[x]*qsum(,,top,,x-)-q(,,top,,x-)+q(,,top,x+,top)-b[x]*qsum(,,top,x+,top);
if(aa<ans){
ans=aa;
jue=i;
ansn=b[x];
}
add(,,top,a[i+],);add(,,top,a[i-k+],-);
}
printf("%lld\n",ans);
for(int i=;i<jue-k+;++i)printf("%d\n",b[a[i]]);
for(int i=jue-k+;i<=jue;++i)printf("%d\n",ansn);
for(int i=jue+;i<=n;++i)printf("%d\n",b[a[i]]);
return ;
}

[POI2008]KLO-Building blocks的更多相关文章

  1. Intel&&num;174&semi; Threading Building Blocks &lpar;Intel&&num;174&semi; TBB&rpar; Developer Guide 中文 Parallelizing Data Flow and Dependence Graphs并行化data flow和依赖图

    https://www.threadingbuildingblocks.org/docs/help/index.htm Parallelizing Data Flow and Dependency G ...

  2. bc&period;34&period;B&period;Building Blocks&lpar;贪心)

    Building Blocks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  3. DTD - XML Building Blocks

    The main building blocks of both XML and HTML documents are elements. The Building Blocks of XML Doc ...

  4. 企业架构研究总结(35)——TOGAF架构内容框架之构建块(Building Blocks)

    之前忙于搬家移居,无暇顾及博客,今天终于得闲继续我的“政治课”了,希望之后至少能够补完TOGAF方面的内容.从前面文章可以看出,笔者并无太多能力和机会对TOGAF进行理论和实际的联系,仅可对标准的文本 ...

  5. TOGAF架构内容框架之构建块(Building Blocks)

    TOGAF架构内容框架之构建块(Building Blocks) 之前忙于搬家移居,无暇顾及博客,今天终于得闲继续我的“政治课”了,希望之后至少能够补完TOGAF方面的内容.从前面文章可以看出,笔者并 ...

  6. HDU—— 5159 Building Blocks

    Problem Description After enjoying the movie,LeLe went home alone. LeLe decided to build blocks. LeL ...

  7. &lbrack;翻译&rsqb;Review——How JavaScript works:The building blocks of Web Workers

    原文地址:https://blog.sessionstack.com/how-javascript-works-the-building-blocks-of-web-workers-5-cases-w ...

  8. 四、Implementation&colon; The Building Blocks 实现:构件

    四.Implementation: The Building Blocks 实现:构件 This is the essential part of this guide. We will introd ...

  9. 2&period;3 Core Building Blocks 核心构件

    Core Building Blocks 核心构件 DDD mostly focuses on the Domain & Application Layers and ignores the ...

  10. 解题:POI2008 Building blocks

    题面 显然我们需要考虑每一个区间,而这个问题显然我们都会做,这不就是这道题么,也就是说假如中位数是$mid$,区间和是$sum$,那么代价就是$\sum\limits_{i=l}^r |mid-num ...

随机推荐

  1. android学习之ListView

    移通152余继彪 该组件用于显示列表的view  包含了三个关键元素 listView 适配器 以及数据,适配器主要是用于将数据映射到listview,适配器数据主要是有hasmap 配合list对每 ...

  2. UDP Client—Linux

    #include <stdio.h> #include <netinet/ip.h> int main(int argc,char *argv[]) { #define PER ...

  3. 跳出iframe

    摘要 有时候需要用到iframe,但里面的单击里面的链接的时候,总是在该iframe中打开. 解决办法 其实解决起来也很简单. 在iframe中的head标签中添加下面的标签即可. <base ...

  4. VS工程目标文件名设置

    默认的输出文件名是$(ProjectName) 可以在项目属性-配置属性-常规-目标文件名中设置 例如我想在Debug版本的输出文件加一个后缀d,那么我可以这样设置:$(ProjectName)d

  5. 解决WebSphere异常:SRVE0199E&colon; 已获取了 OutputStream

    dlg: 例如 在WebSphere这个目录下 /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/temp/master1Node01/master1/gk ...

  6. jquery checkbox勾选取消勾选的诡异问题

    jquery checkbox勾选/取消勾选的诡异问题jquery checkbox勾选/取消勾选的诡异问题 <form>        你爱好的运动是?<input type=&q ...

  7. 选择排序O&lpar;n&Hat;2&rpar;与快速排序O&lpar;nlogn&rpar;的优越性代码体现

    随机函数生成一个超大数组: [code]: #include <iostream> #include <stdio.h> #include<time.h> #inc ...

  8. 作业还是作孽?——Leo鉴书79

    中国孩子,尤其是城市孩子课业过重是个不争的事实.儿子上幼儿园的作业已经能做到8点多了,上小学之后不知道是不是会整得更晚.于是入手这本<家庭作业的迷思>,认真读读.请特别注意,不要买书叫&q ...

  9. 一场刺激的游戏——很文艺的山东省第四届ACM赛总结(菜鸟版)

               人生就像一个个节点,节点中或许有成功,失败,满足,遗憾,但是只要它是不可复制的,在日后,便是美好.                                         ...

  10. 【菜鸟入门】安装配置eclipse 并编写运行第一个Java程序

    不得不吐槽一下,安装配置这eclipse真是太费劲了...下面总结一下,以便下次再安装 本人 win10系统,64位机 一.在官网下载eclipse安装包 文件名:eclipse-inst-win64 ...