题面在这里

做法

枚举每长度为 k k k 的段寻找中位数即可。splay维护。

代码

=> 主要是想说这一点,由于计算的必要,相同的数不能合并到一个节点,否则之后调用 sum[ch[x][0]]/sum[ch[x][1]] 的时候会漏算和节点 x" role="presentation">xxx 相同的数。

#include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x); i<=(y); i++)
#define ll long long
#define ld long double
#define inf 1000000000
#define INF 1000000000000000000ll
using namespace std;
ll read(){char ch=getchar(); ll x=0; int op=1;for (; !isdigit(ch); ch=getchar()) if (ch=='-') op=-1;for (; isdigit(ch); ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';return x*op;
}
#define N 100005
int n,m,a[N],data[N],fa[N],ch[N][2],siz[N],rt,tot; ll ans,sum[N];
void up(int x){sum[x]=sum[ch[x][0]]+sum[ch[x][1]]+data[x];siz[x]=siz[ch[x][0]]+siz[ch[x][1]]+1;
}
void rot(int x){int y=fa[x],z=fa[y],f=ch[y][1]==x;ch[y][f]=ch[x][f^1]; if (ch[x][f^1]) fa[ch[x][f^1]]=y;fa[x]=z; if (z) ch[z][ch[z][1]==y]=x;fa[y]=x; ch[x][f^1]=y; up(y); up(x);
}
void splay(int x,int tp){while (fa[x]!=tp){int y=fa[x],z=fa[y];if (z!=tp) rot((ch[z][0]==y)==(ch[y][0]==x)?y:x);rot(x);}if (!tp) rt=x;
}
void insert(int val){int x=rt;if (!rt){rt=x=++tot;ch[x][0]=ch[x][1]=fa[x]=0;data[x]=sum[x]=val; siz[x]=1;return;}while (x){int &y=ch[x][val>data[x]];if (!y){y=++tot;ch[y][0]=ch[y][1]=0; fa[y]=x;data[y]=sum[y]=val; siz[y]=1;x=y; break;}x=y;}splay(x,0);
}
int find(int val){int x=rt;while (ch[x][val>data[x]] && data[x]!=val) x=ch[x][val>data[x]];splay(x,0); return x;
}
int getpre(int val){int x=find(val); if (data[x]<val) return x;x=ch[x][0];while (ch[x][1]) x=ch[x][1];return x;
}
int getnxt(int val){int x=find(val); if (data[x]>val) return x;x=ch[x][1];while (ch[x][0]) x=ch[x][0];return x;
}
void delet(int val){int x=getpre(val),y=getnxt(val);splay(x,0); splay(y,x);int &z=ch[y][0];data[z]=sum[z]=siz[z]=0,z=0,splay(y,0);
}
int getkth(int k){int x=rt;while (1){if (k<=siz[ch[x][0]]) x=ch[x][0];else if (k>siz[ch[x][0]]+1) k-=siz[ch[x][0]]+1,x=ch[x][1];else return x;}
}
int main(){n=read(),m=read();rep (i,1,n) a[i]=read();insert(-inf); insert(inf);rep (i,1,m-1) insert(a[i]);ans=INF;rep (i,m,n){insert(a[i]);int tmp=getkth((m+1)/2+1);//返回节点编号splay(tmp,0);ans=min(ans,(ll)data[tmp]*((m+1)/2-1)-(sum[ch[tmp][0]]+inf)+(sum[ch[tmp][1]]-inf)-(ll)data[tmp]*(m-(m+1)/2));delet(a[i-m+1]);}cout<<ans<<endl;return 0;
}

bzoj1112: [POI2008]砖块Klo(splay)相关推荐

  1. bzoj1112[POI2008]砖块Klo*

    bzoj1112[POI2008]砖块Klo 题意: N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:丢掉某柱砖的一块砖.给某柱加上一块砖,现在希望用最小次数的动作完成任务.N≤1 ...

  2. BZOJ1112 - [POI2008]砖块Klo

    原题链接 题意简述 给出一个n(n≤105)n(n \leq 10^5)个数的序列a(max{a}≤106)a(max\{a\}\leq10^6),每次给一个数+1/-1.求使得序列中存在连续k(k≤ ...

  3. BZOJ1112[POI2008]砖块Klo——非旋转treap

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

  4. 【主席树】bzoj1112: [POI2008]砖块Klo

    数据结构划一下水 Description N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另一柱.仓库无限大. ...

  5. BZOJ1112: [POI2008]砖块Klo(洛谷P3466)

    平衡树 BZOJ题目传送门 洛谷题目传送门 动态维护中位数,平衡树上一发就好了. 代码: #include<cctype> #include<cstdio> #include& ...

  6. BZOJ1112: [POI2008]砖块Klo

    Description N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另一柱.仓库无限大. 现在希望用最小次 ...

  7. 1112: [POI2008]砖块Klo

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

  8. [POI2008]砖块Klo

    1112: [POI2008]砖块Klo Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2910 Solved: 1026 [Submit][Stat ...

  9. [POI2008] 砖块Klo

    洛谷 P3466 传送门 bzoj 1112 传送门 用treap维护一段长为k的区间即可. 先把1~k-1的都插入treap. 然后从k到n进行如下操作: 插入一个,计算,删除一个. 用到一个结论: ...

最新文章

  1. 转--SDP 协议分析
  2. MySQL使用精确匹配和范围查询的效率差别
  3. Gobblin编译支持CDH5.4.0
  4. source insight 深色主题配置文件
  5. 求[100,9999]区间的超级素数,c语言编程,程序中含数组,2010计算机等级考试二级C语言预测题...
  6. JSK-23223 数字反转【进制】
  7. Win10—VMware15虚拟机安装教程
  8. 【资源分享】Dll Injector(DLL注入器)
  9. 数据结构-树-愿天下有情人都是失散多年的兄妹
  10. 既是计算机高手,也是情书高手,原来王小波才是最会撩妹的程序员
  11. 三人行新解:前辈、平辈和后辈
  12. 深度学习之facenet人脸识别网络介绍
  13. csv文件用什么打开_什么是CSV文件,如何打开它?
  14. 燕山大学——软件用户界面设计(五)UI架构
  15. 团队管理的四大挑战——裁人篇
  16. HBase数据库使用TTL清理过期数据
  17. 大数据风控AI竞赛总结
  18. system.exe,alien32.exe,ftsKetNt.7ps,SysKetNt.Sys, iexpe.exe等1
  19. VPS服务器能够做些什么?
  20. pccad无法找到所需的动态链接库_请教天正给排水8.2问题(tch_initstart.arx 无法找到所需的动态链接库或其他文件)...

热门文章

  1. 李宏毅ML -lecture 0 机器学习介绍
  2. 来自Unity的2022新年祝福
  3. 电脑里的计算机无法打字,计算机无法在计算机上打字的原因是什么[解决方案]...
  4. Java使用hutool工具类发送http请求
  5. php实现上传图片功能,php实现上传图片功能
  6. DEBUG模式和RELEASE模式切换
  7. 优炫软件连续五年入选“北京软件和信息服务业综合实力前百家企业”
  8. redis 数据删除策略
  9. mac电脑安装Android studio
  10. Python情感分析