Code:

#include<bits/stdc++.h>
using namespace std;
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 200000
#define inf 10000000000000
#define get(x) (ch[f[x]][1]==x)
#define ll long long
int root,cc,kk;
int h[maxn],ch[maxn][2],f[maxn],siz[maxn],val[maxn];
long long sumv[maxn];
long long ans=inf;
void pushup(int x)
{
sumv[x]=sumv[ch[x][0]]+sumv[ch[x][1]]+h[x];
siz[x]=siz[ch[x][0]]+siz[ch[x][1]]+1;
}
void rotate(int x)
{
int old=f[x],fold=f[old],which=get(x);
ch[old][which]=ch[x][which^1],f[ch[old][which]]=old;
ch[x][which^1]=old,f[old]=x,f[x]=fold;
if(fold) ch[fold][ch[fold][1]==old]=x;
pushup(x),pushup(old);
}
void splay(int x,int &tar)
{
int u=f[tar];
for(int fa;(fa=f[x])!=u;rotate(x))
if(f[fa]!=u)
rotate(get(fa)==get(x)?fa:x);
tar=x;
}
void insert(int &x,int key,int ff)
{
if(!x) x=key,f[x]=ff;
else insert(ch[x][h[key]>h[x]],key,x);
pushup(x);
}
int query(int kth)
{
int x=root;
while(1)
{
if(siz[ch[x][0]]+1==kth) return x;
if(siz[ch[x][0]]>=kth) x=ch[x][0];
else kth-=(siz[ch[x][0]]+1),x=ch[x][1];
}
}
void del(int x)
{
if(!ch[x][0]) root=ch[x][1], f[root]=ch[x][1]=0;
else if(!ch[x][1]) root=ch[x][0], f[root]=ch[x][0]=0;
else
{
int l=ch[x][0];
while(ch[l][1]) l=ch[l][1];
splay(l, ch[x][0]);
ch[l][1]=ch[x][1], f[ch[x][1]]=l, f[l]=ch[x][0]=ch[x][1]=0, pushup(l);
root=l;
}
}
void solve(int k,int L)
{
int mid=(k%2==0)?k/2:(k/2)+1,x=query(mid);
splay(x,root);
int l=ch[root][0],r=ch[root][1];
ll re=0;
re+=(h[x]*siz[l]-sumv[l]);
re+=(sumv[r]-h[x]*siz[r]);
if(re<ans) ans=re, cc=L, kk=h[x];
}
int main()
{
// setIO("input");
int n,k,i,j;
scanf("%d%d",&n,&k);
for(i=1;i<=n;++i) scanf("%d",&h[i]);
for(i=1;i<=k;++i) { insert(root,i,0); if(i%6==0) splay(i,root); }
solve(k,1);
for(i=k+1;i<=n;++i)
{
j=i-k+1;
splay(j-1, root), del(j-1), insert(root,i,0), splay(i,root), solve(k,j);
}
printf("%lld\n",ans);
return 0;
}

  

BZOJ 1112: [POI2008]砖块Klo Splay + 性质分析的更多相关文章

  1. BZOJ 1112: [POI2008]砖块Klo

    1112: [POI2008]砖块Klo Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1736  Solved: 606[Submit][Statu ...

  2. [BZOJ 1112] [POI2008] 砖块Klo 【区间K大】

    题目链接:BZOJ - 1112 题目分析 枚举每一个长度为k的连续区间,求出这个区间的最优答案,更新全局答案. 可以发现,这个区间的所有柱子最终都变成这k个数的中位数时最优,那么我们就需要查询这个区 ...

  3. 线段树 || BZOJ 1112: [POI2008]砖块Klo

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1112 题解: 希望有连续K柱的高度是一样的,就先把1~K的数扔进线段树(线段树的下标就是数值 ...

  4. BZOJ 1112 [POI2008]砖块Klo(可持久化线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1112 [题目大意] 给出一个数列,对于一个操作,你可以对一个数+1,或者一个数-1, ...

  5. bzoj 1112: [POI2008]砖块Klo【对顶堆】

    priority_queue实现的对顶堆,细节超级多WA了十几次--但是理论上是最简便的orz其实是我已经不会写平衡树了 枚举左端点,显然要把这一段的高度搞成(l,l+k-1)的高度中位数,所以需要一 ...

  6. BZOJ 1112: [POI2008]砖块Klo1112( BST )

    枚举每个长度为k的区间, 然后用平衡树找中位数进行判断, 时间复杂度O(nlogn). 早上起来精神状态不太好...连平衡树都不太会写了...果断去看了会儿番然后就A了哈哈哈 ------------ ...

  7. 1112: [POI2008]砖块Klo

    1112: [POI2008]砖块Klo Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1245  Solved: 426[Submit][Statu ...

  8. [Bzoj1112][POI2008]砖块Klo(splay)

    1112: [POI2008]砖块Klo Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2353  Solved: 831[Submit][Statu ...

  9. [BZOJ1112][POI2008]砖块Klo

    [BZOJ1112][POI2008]砖块Klo 试题描述 N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另 ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_6_练习_序列化集合

  2. 《图解设计模式》读书笔记8-2 MEMENTO模式

    目录 Memento模式 示例代码 程序类图 代码 角色和类图 模式类图 角色 思路拓展 接口可见性 保存多少个Memento 划分Caretaker和Originator的意义 Memento模式 ...

  3. http://blog.csdn.net/sdksdk0/article/details/50749326

    http://blog.csdn.net/sdksdk0/article/details/50749326

  4. django框架ORM数据库

    字段类型 选项 null是数据库范畴的概念,blank是表单验证范畴的 外键 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.mode ...

  5. LeetCode——142 设计链表2

    题目 代码 class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode *fast = head, *slow ...

  6. JavaScript 开发的 睡眠状况自测(SRSS)

    Javascript 开发睡眠状况自测程序,手记!2019.11.13日... <script>//初始化fbox = new Findpair('fbox','output');fbox ...

  7. JavaSE编码试题强化练习4

    1.编写一个Worker类,为Worker类添加相应的代码,使得Worker对象能正确放入TreeSet中.并编写相应的测试代码. /** * Worker类 */ public class Work ...

  8. Git-第二篇廖雪峰Git教程学习笔记(1)基本命令,版本回退

    1.安装Git-2.16.2-64-bit.exe后,设置用户名,用户邮箱 #--global参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地 ...

  9. 【洛谷p1970】花匠

    莫得致敬lz谢谢.lz的题解是优秀的题解谢谢! 看算法标签 但是我并不会DP的思路,用一个很神奇的码量超级少的代码(虽然我码了超多),然后其实这个数据可以看做是一个函数嘛对吧:(比如说样例) 那么要注 ...

  10. 小白学Python(11)——pyecharts,绘制饼图 Pie

    Pie-基本示例 from example.commons import Faker from pyecharts import options as opts from pyecharts.char ...