枚举长度为m的所有段,尝试用中位数更新答案。

所以需要数据结构,支持查询k大,以及大于/小于 k大值 的数的和。

平衡树、权值线段树、权值分块什么的随便呢。

 #include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
struct Point{int v,p;}t[];
bool operator < (const Point &a,const Point &b){return a.v<b.v;}
int sumv[],ma[],en,a[],b[],tot[],l[],r[],num[],sum=,K,n,m;
ll ans=,tAns;
void makeblock()
{
int sz=sqrt(en); if(!sz) sz=;
for(;sum*sz<en;++sum)
{
l[sum]=r[sum-]+; r[sum]=sum*sz;
for(int i=l[sum];i<=r[sum];++i) num[i]=sum;
}
l[sum]=r[sum-]+; r[sum]=en;
for(int i=l[sum];i<=r[sum];++i) num[i]=sum;
}
void Insert(const int &x){++b[x]; ++tot[num[x]]; sumv[num[x]]+=(ll)ma[x];}
void Delete(const int &x){--b[x]; --tot[num[x]]; sumv[num[x]]-=(ll)ma[x];}
int Query(const int &x)
{
int cnt=; ll now=;
for(int i=;;i++)
{
cnt+=tot[i]; now+=sumv[i];
if(cnt>=x)
{
cnt-=tot[i]; now-=sumv[i];
for(int j=l[i];;j++)
{
cnt+=b[j]; now+=(ll)ma[j]*(ll)b[j];
if(cnt>=x)
{
cnt-=b[j]; now-=(ll)ma[j]*(ll)b[j];
tAns=((ll)ma[j]*(ll)cnt-now);
return j;
}
}
}
}
}
void Next_Sum(const int &x)
{
int cnt=; ll now=;
for(int i=x+;i<=r[num[x]];++i) {cnt+=b[i]; now+=(ll)ma[i]*(ll)b[i];}
for(int i=num[x]+;i<=sum;++i) {cnt+=tot[i]; now+=sumv[i];}
tAns+=(now-(ll)ma[x]*(ll)cnt);
}
int main()
{
scanf("%d%d",&n,&m); K=(m>>)+;
for(int i=;i<=n;++i)
{
scanf("%d",&t[i].v);
t[i].p=i;
} sort(t+,t+n+);
ma[a[t[].p]=++en]=t[].v;
for(int i=;i<=n;++i)
{
if(t[i].v!=t[i-].v) ++en;
ma[a[t[i].p]=en]=t[i].v;
} makeblock();
for(int i=;i<=m;++i) Insert(a[i]);
int t=Query(K); Next_Sum(t); ans=min(ans,tAns);
for(int i=m+;i<=n;++i)
{
Delete(a[i-m]); Insert(a[i]);
int t=Query(K);
Next_Sum(t);
ans=min(ans,tAns);
} printf("%lld\n",ans);
return ;
}

【枚举】【权值分块】bzoj1112 [POI2008]砖块Klo的更多相关文章

  1. [BZOJ1112][POI2008]砖块Klo

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

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

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

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

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

  4. [BZOJ1112] [POI2008] 砖块Klo (treap)

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

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

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

  6. 【BZOJ1112】[POI2008]砖块Klo Treap

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

  7. 1112: [POI2008]砖块Klo

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

  8. 【DFS序】【莫队算法】【权值分块】bzoj2809 [Apio2012]dispatching

    题意:在树中找到一个点i,并且找到这个点子树中的一些点组成一个集合,使得集合中的所有点的c之和不超过M,且Li*集合中元素个数和最大 首先,我们将树处理出dfs序,将子树询问转化成区间询问. 然后我们 ...

  9. BZOJ 1112: [POI2008]砖块Klo

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

随机推荐

  1. bulk_insert_buffer_size and InnoDB

    Q: I read the following on this page http://dev.mysql.com/doc/mysql/en/server-system-variables.html ...

  2. [bzoj 3224]手写treap

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3224 bzoj不能用time(0),看到这个博客才知道,我也RE了好几发…… #inclu ...

  3. E. Intercity Travelling

    E. Intercity Travelling time limit per test 1.5 seconds memory limit per test 256 megabytes input st ...

  4. Welcome to ShangHai <码农上漂记>

    来上海这边快三周了,一切都还算顺利,多亏了朋友们的帮助,要不就得街头打地铺了.对于上海这样的大都市,年轻的我们都想挤一挤,凑凑热闹,实现自己的小小抱负.然而不是每个人都混的起的.以前的我还总想着来大城 ...

  5. Codis+redis 集群测试

    Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有显著区别 (不支持的命令列表), 上层应用可以像使用 ...

  6. memcache client 的递增 incr 问题

    转载自:http://blog.csdn.net/mumu_shui/article/details/6048603 在集群环境(两台及以上的web服务)下为了保证自动生成号码(由于号码前缀是根据一些 ...

  7. Spring 学习笔记(一)

    一.Spring 是什么? •Spring 是一个开源框架. •Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能. • ...

  8. HTTP===如何理解网关

    首先举个例子: 假设你的名字叫小不点(很小),你住在一个大院子里,你的邻居有很多小伙伴,父母是你的网关.当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你 ...

  9. 复选框回显、全选、非全选、cookie处理数据、json数组对象转换处理学习笔记参考的页面

    <%@include file="/common/head.jsp"%> <%@ page contentType="text/html; charse ...

  10. js中如何对时间进行设置

    js中如何对时间进行设置 Js获取当前日期时间及其它操作var myDate = new Date();myDate.getYear();        //获取当前年份(2位)myDate.getF ...