【枚举】【权值分块】bzoj1112 [POI2008]砖块Klo
枚举长度为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的更多相关文章
- [BZOJ1112][POI2008]砖块Klo
[BZOJ1112][POI2008]砖块Klo 试题描述 N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另 ...
- [Bzoj1112][POI2008]砖块Klo(splay)
1112: [POI2008]砖块Klo Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2353 Solved: 831[Submit][Statu ...
- 【主席树】bzoj1112: [POI2008]砖块Klo
数据结构划一下水 Description N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另一柱.仓库无限大. ...
- [BZOJ1112] [POI2008] 砖块Klo (treap)
Description N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另一柱.仓库无限大. 现在希望用最小次 ...
- BZOJ1112[POI2008]砖块Klo——非旋转treap
题目描述 N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另一柱.仓库无限大. 现在希望用最小次数的动作完成任 ...
- 【BZOJ1112】[POI2008]砖块Klo Treap
[BZOJ1112][POI2008]砖块Klo Description N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出 ...
- 1112: [POI2008]砖块Klo
1112: [POI2008]砖块Klo Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1245 Solved: 426[Submit][Statu ...
- 【DFS序】【莫队算法】【权值分块】bzoj2809 [Apio2012]dispatching
题意:在树中找到一个点i,并且找到这个点子树中的一些点组成一个集合,使得集合中的所有点的c之和不超过M,且Li*集合中元素个数和最大 首先,我们将树处理出dfs序,将子树询问转化成区间询问. 然后我们 ...
- BZOJ 1112: [POI2008]砖块Klo
1112: [POI2008]砖块Klo Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1736 Solved: 606[Submit][Statu ...
随机推荐
- HDU4370:0 or 1(最短路)
0 or 1 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4370 Description: Given a n*n matrix Cij (1< ...
- 上海GDG活动有感
本周参加了场上海的GDG活动.本次活动的主办方 先介绍一下: GDG Shanghai 上海GDG(Google开发者社区,以前是GTUG, Google技术用户组) ,众所周知,Google的搜索引 ...
- git 的证书重新设置,以及如何让git 记住提交的用户名和密码
1.git 的证书的重新设置的命令是: git config --system --unset credential.helper 2.保存git的用户名和密码注意这里是全局保存 git config ...
- 【转载】惊天大悲剧-Hadoop的rmr和trash
转自:http://java-doom.iteye.com/blog/1898000 这两天在操作Hadoop集群时,由于一个误操作,制作了一个天大的悲剧 不小心把Hadoop集群上的所有文件全部删除 ...
- Spring Session使用及源码解析
参照: http://blog.csdn.net/wojiaolinaaa/article/details/62424642 总结点spring session的一些知识点: spring通过过滤器, ...
- 【BZOJ】1596: [Usaco2008 Jan]电话网络
[算法]树上贪心 [题解] 因为一个点必须被覆盖,那么它如果没有被子树节点覆盖的话,就覆盖它的父节点. 从叶子开始贪心. 注意,如果它自己已经被选了就不需要选父节点了. #include<cst ...
- [Leetcode Week5]Word Ladder
Word Ladder题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/word-ladder/description/ Description Give ...
- Yeelight介绍
1. 介绍 Yeelight是小米生态链中的WiFi智能灯泡,本文介绍它的接入和控制实现: Yeelight使用的是自定义的私有协议,该协议采用了类似SSDP的发现机制和基于JSON的控制命令 2. ...
- 打包工具 Inno Setup 5
转载: http://www.360doc.com/content/13/0327/13/4221543_274235049.shtml
- (五)对linux内核中jiffies+Hz表示一秒钟的理解
jiffies在内核中是一个全局变量,它用来统计系统启动以来系统中产生的总节拍数,这个变量定义在include/Linux/jiffies.h中,定义形式如下. unsigned long volat ...