Day7-例3
难度级别:C; 运行时间限制:5000ms; 运行空间限制:256000KB; 代码长度限制:2000000B
试题描述

输入
输入的第一行包含整数n和k,其中n(2 ≤ n ≤100 000)表示办公楼的数目,k(1≤ k≤ n/2)表示可利用的网络电缆的数目。接下来的n行每行仅包含一个整数(0≤ s ≤1000 000 000), 表示每个办公楼到大街起点处的距离。这些整数将按照从小到大的顺序依次出现。
输出
输出应由一个正整数组成,给出将2K个相异的办公楼连成k对所需的网络电缆的最小总长度。
输入示例
5 2
1
3
4
6
12
输出示例
4

题解:奇妙的题。用堆维护每一段,如果取了一个就要把(两边的-这个)放到堆里,表示可以改成选两边的,但是就是不能同时选。

用set实现:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
#include<cstring>
#include<set>
#define PAU putchar(' ')
#define ENT putchar('\n')
using namespace std;
const int maxn=+;
const long long inf=4e18;
struct data{long long v;int p;};
bool operator<(const data&a,const data&b){return a.v<b.v||(a.v==b.v&&a.p<b.p);}
inline long long read(){
long long x=,sig=;char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=;
for(;isdigit(ch);ch=getchar())x=*x+ch-'';
return sig?x:-x;
}
inline void write(long long x){
if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
int len=;long long buf[];while(x)buf[len++]=x%,x/=;
for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
}
set<data>S;
long long A[maxn],d[maxn];
int L[maxn],R[maxn],n,k;
int main(){
data x;set<data>::iterator t;
n=read();k=read();
for(int i=;i<=n;i++)A[i]=read();
for(int i=;i<n;i++)d[i]=A[i+]-A[i];d[]=inf;d[n]=inf;
for(int i=;i<n;i++)R[i]=i+,L[i+]=i;
for(int i=;i<=n;i++)S.insert((data){d[i],i});
long long ans=;
for(int i=;i<=k;i++){
t=S.begin();x=*t;ans+=x.v;
int l=L[x.p],r=R[x.p];
S.erase(t);S.erase((data){d[l],l});S.erase((data){d[r],r});
R[l]=R[r];L[R[r]]=l;d[l]+=d[r]-x.v;
S.insert((data){d[l],l});
}write(ans);return ;
}

treap仍然调不对啊。。。为什么。。。我改了重载也过不了啊。。。。。

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
#include<cstring>
#include<ctime>
#include<set>
#define PAU putchar(' ')
#define ENT putchar('\n')
#define CH for(int d=0;d<2;d++)if(ch[d])
using namespace std;
const int maxn=+,maxnode=+;
const long long inf=4e18;
struct data{long long v;int p;};
bool operator>(const data&a,const data&b){return a.v>b.v||(a.v==b.v&&a.p>b.p);}
bool operator==(const data&a,const data&b){return (a.v==b.v)&&(a.p==b.p);}
struct node{
node*ch[];data v;int siz,r;
void init(){siz=;r=rand();ch[]=ch[]=NULL;return;}
void update(){siz=;CH{siz+=ch[d]->siz;}return;}
}treap[maxnode],*nodecnt=treap,*root;queue<node*>RM;
node*newnode(){node*k;if(RM.empty())k=nodecnt++;else k=RM.front(),RM.pop();k->init();return k;}
void del(node*&x){RM.push(x);x=NULL;return;}
void rotate(node*&x,int d){
node*k=x->ch[d^];x->ch[d^]=k->ch[d];k->ch[d]=x;x->update();k->update();x=k;return;
}
void insert(node*&x,data v){
if(!x)x=newnode(),x->v=v;
else{int d=v>x->v;insert(x->ch[d],v);
if(x->r<x->ch[d]->r)rotate(x,d^);else x->update();
}return;
}
void remove(node*&x,data v){
if(x->v==v){
if(x->ch[]&&x->ch[]){
int d=x->ch[]->r>x->ch[]->r;rotate(x,d);remove(x->ch[d],v);
}else{node*k=x;x=x->ch[]?x->ch[]:x->ch[];del(k);}
}else remove(x->ch[v>x->v],v);
if(x)x->update();return;
}
void print(node*x){
if(!x)return;print(x->ch[]);printf("%lld ",x->v.v);print(x->ch[]);return;
}
data getmi(node*x){
if(x->ch[])x=x->ch[];return x->v;
}
inline long long read(){
long long x=,sig=;char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=;
for(;isdigit(ch);ch=getchar())x=*x+ch-'';
return sig?x:-x;
}
inline void write(long long x){
if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
int len=;long long buf[];while(x)buf[len++]=x%,x/=;
for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
}
long long A[maxn],d[maxn];
int L[maxn],R[maxn],n,k;
int main(){
srand(time());
n=read();k=read();
for(int i=;i<=n;i++)A[i]=read();
for(int i=;i<n;i++)d[i]=A[i+]-A[i];d[]=inf;d[n]=inf;
for(int i=;i<n;i++)R[i]=i+,L[i+]=i;
for(int i=;i<=n;i++)insert(root,(data){d[i],i});
long long ans=;
for(int i=;i<=k;i++){
data t=getmi(root);ans+=t.v;
int l=L[t.p],r=R[t.p];
remove(root,t);remove(root,(data){d[l],l});remove(root,(data){d[r],r});
R[l]=R[r];L[R[r]]=l;d[l]+=d[r]-t.v;
insert(root,(data){d[l],l});
}write(ans);return ;
}

COJ 2110 Day7-例3的更多相关文章

  1. 冲刺阶段day7

    day7 项目进展 又是一个周三,有轮到我写东西了.首先我们对昨天的成果调试了几遍,改了几个小Bug之后就没有什么问题了,完善了登录界面的代码,学生管理这部分终于被敲定下来,并且正式完工了.然后还生下 ...

  2. COJ 0801 非传统题(一)

    非传统题(一) 难度级别:A: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 大家好!我是COJ第一道非传统题,是不是感觉非常的excite ...

  3. 【LOJ6077】「2017 山东一轮集训 Day7」逆序对 生成函数+组合数+DP

    [LOJ6077]「2017 山东一轮集训 Day7」逆序对 题目描述 给定 n,k ,请求出长度为 n的逆序对数恰好为 k 的排列的个数.答案对 109+7 取模. 对于一个长度为 n 的排列 p ...

  4. loj #6077. 「2017 山东一轮集训 Day7」逆序对

    #6077. 「2017 山东一轮集训 Day7」逆序对   题目描述 给定 n,k n, kn,k,请求出长度为 n nn 的逆序对数恰好为 k kk 的排列的个数.答案对 109+7 10 ^ 9 ...

  5. 100天搞定机器学习|Day7 K-NN

    最近事情无比之多,换了工作.组队参加了一个比赛.和朋友搞了一些小项目,公号荒废许久.坚持是多么重要,又是多么艰难,目前事情都告一段落,我们继续100天搞定机器学习系列.想要继续做这个是因为,一方面在具 ...

  6. 「雅礼集训 2017 Day7」跳蚤王国的宰相(树的重心)

    题面 来源 「 雅 礼 集 训 2017 D a y 7 」 跳 蚤 王 国 的 宰 相   传 统 2000   m s 1024   M i B {\tt「雅礼集训 2017 Day7」跳蚤王国的 ...

  7. .NET Core 首例 Office 开源跨平台组件(NPOI Core)

    前言 最近项目中,需要使用到 Excel 导出,找了一圈发现没有适用于 .NET Core的,不依赖Office和操作系统限制的 Office 组件,于是萌生了把 NPOI 适配并移植到 .NET C ...

  8. 以向VS 程序打包集成自动写入注册表功能为例,介绍如何实现自由控制安装过程

    最近由于项目部署时需要更灵活的控制程序安装的流程以及自定义安装行为,特意研究了一下VS程序打包,把解决办法和大家分享一下. 以VS2010为例: 这是一个已经设置好最基本的Visual Studio ...

  9. UWP开发:APP之间的数据交互(以微信为例)

    目录 说明 UWP应用唤醒方式 跟微信APP交互数据 APP之间交互数据的前提 说明 我们经常看到,在手机上不需要退到桌面,APP之间就可以相互切换,并且可以传递数据.比如我在使用知乎APP的时候,需 ...

随机推荐

  1. 如果 @s int 把它转成字符,可以这样 cast(@s as varchar)

    如果 @s int 把它转成字符,可以这样 cast(@s as varchar)

  2. 在Weex中定制自定义组件

    1.配置自定义组件 public class MyViewComponent extends WXComponent{ public MyViewComponent(WXSDKInstance ins ...

  3. ContextSwitchDeadlock was detected Message(读取注册表时出现).

    google的时候,在StackOverflow中得到个暂时解决的方法: http://stackoverflow.com/questions/2797677/contextswitchdeadloc ...

  4. [转载]CentOS6.4+Mono3.0.7+Jexus5.2.5

    本文章来自互联网,但是本人已经在VM虚拟机里面测试成功,所以分享给大家 1.更新 yum -y update 2.安装Mono源码安装需要的库 yum -y install gcc gcc-c++ a ...

  5. php100视频原始地址列表整理:

    php100视频原始地址列表整理: 教程名称 . 1:环境配置与代码调试 2:PHP的数据类型与源码调试 3:常用PHP运算类型介绍与应用 4: PHP条件语句介绍与应用 5:PHP循环语句的介绍与应 ...

  6. IDEA SVN1.8 问题解决

    转自 http://blog.jetbrains.com/idea/2013/12/subversion-1-8-and-intellij-idea-13/

  7. [转]关于java中的 sychronized 同步方法 与 同步块的理解

    首先,需要说明一点,也是最重要的一点,无论是同步方法 还是 同步块 都是只针对同一个对象的多线程而言的,只有同一个对象产生的多线程,才会考虑到 同步方法 或者是 同步块,如果定义多个实例的同步,可以考 ...

  8. sublime text 2 笔记

    sublime text 2 ,是代码程序员最佳编辑器,不是之一.其快捷优雅的操作风格,和便利的快捷键,是程序员码农的不二选择. 网上下载sublime text 2,支持文件拖放,文件夹拖放.3.0 ...

  9. power desinger 学习笔记<六>

    原帖地址:http://blog.csdn.net/spt110/article/details/8640849 PowerDesigner中Table视图同时显示Code和Name,像下图这样的效果 ...

  10. 【转】iOS开发网络篇—发送json数据给服务器以及多值参数

    原文: http://www.cnblogs.com/wendingding/p/3950132.html 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 ...