删除物品[JLOI2013]
题目描述
输入
输出
样例输入
3 3
1
4
5
2
7
3
样例输出
6
提示
1<=N1+N2<=100000
题解
讲个真实的故事:说从前有个小傻瓜,她打了一个50分的模拟,但她对这个模拟很不满意,认为它T得太厉害。后来她想到了一个60分的优化方法,于是她打了出来,又把它交了上去,但是这个优化有个小缺陷,然后0分。。。明明是一道很清楚的题啊。今天考完试之后,似乎有很多同学觉得自己离正解和高分很近,然而结果却很糟,我不也是这样吗?虽然这样的事很可惜,可是事出有因。好多数据结构很久没打过,早上稍微看了一下树状数组,但是没有细致复习,总觉得打线段树也是一样(这代码量根本没法比)。甚至于改完了之后在cogs上提交,因为太急躁三遍都没打对文件名,这就是心态问题了。吃一堑长一智,不是但愿如此,而是必须如此。
int lowbit(int x)
{
return x&(-x);
}
for(int i=1;i<=n;i++)
{
int temp=lowbit(i);
for(int j=i-t+1;j<=i;j++)
d[i]+=a[j];
}
int getsum(int x)
{
int jg=0;
while(x>0)
{
jg+=d[x];
x-=lowbit(x);
}
return jg;
}
void update(int x,int y)
{
while(x<=n)
{
d[x]+=y;
x+=lowbit(x);
}
}
先把物品的优先级离散一下,再把第一堆倒序和第二堆对在一起,标记出各优先级的物品所在的位置,然后用树状数组处理;优先级最高的物品特殊处理,此后每个物品到下一个物品的步数等于两物品前缀和之差的绝对值-1,每移动一个物品就把它的权值变为0即可。
for(int i=n;i>1;i--)
{
jg+=abs(getsum(wz[i])-getsum(wz[i-1]))-1;
update(wz[i],-1);
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int sj=;
int n1,n2,n,yx[sj],a1,a2,wz[sj],a[sj],d[sj],t;
long long jg;
struct WP
{
int ord;
long long vl;
}wp[sj];
int comp(const WP&a,const WP&b)
{
return a.vl<b.vl;
}
int lowbit(int x)
{
return x&(-x);
}
int getsum(int x)
{
int res=;
while(x>)
{
res+=d[x];
x-=lowbit(x);
}
return res;
}
void update(int x,int y)
{
while(x<=n)
{
d[x]+=y;
x+=lowbit(x);
}
}
int main()
{
scanf("%d%d",&n1,&n2);
n=n1+n2;
for(int i=;i<=n;i++)
{
scanf("%lld",&wp[i].vl);
wp[i].ord=i;
}
sort(wp+,wp+n+,comp);
for(int i=;i<=n;i++)
yx[wp[i].ord]=i;
for(int i=;i<=n1;i++)
{
a[n1-i+]=;
wz[yx[i]]=n1-i+;
}
for(int i=n1+;i<=n;i++)
{
a[i]=;
wz[yx[i]]=i;
}
if(wz[n]>n1) jg=wz[n]-n1-;
else jg=n1-wz[n];
for(int i=;i<=n;i++)
{
t=lowbit(i);
for(int j=i-t+;j<=i;j++)
d[i]+=a[j];
}
for(int i=n;i>;i--)
{
jg+=abs(getsum(wz[i])-getsum(wz[i-]))-;
update(wz[i],-);
}
printf("%lld",jg);
//while(1);
return ;
}
删除物品[JLOI2013]的更多相关文章
- [bzoj3192][JLOI2013]删除物品(树状数组)
3192: [JLOI2013]删除物品 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 872 Solved: 508[Submit][Status ...
- 洛谷 P3253 [JLOI2013]删除物品 解题报告
P3253 [JLOI2013]删除物品 题目描述 箱子再分配问题需要解决如下问题: (1)一共有\(N\)个物品,堆成\(M\)堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能 ...
- 3192: [JLOI2013]删除物品
3192: [JLOI2013]删除物品 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1366 Solved: 794 [Submit][Statu ...
- [bzoj3192][JLOI2013]删除物品_树状数组_栈
删除物品 bzoj-3192 JLOI-2013 题目大意:给你n个物品,分成2堆.所有的物品有不同的优先级.我只可以将一堆中的堆顶移动到另一个堆的堆顶.而如果当前物品是全局所有物品中优先级最高的,我 ...
- bzoj 3192: [JLOI2013]删除物品
Description 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能够移动某堆中位于顶端的物品. ( ...
- [JLOI2013]删除物品
嘟嘟嘟 只要每一次将优先级最高的上面的物品移走,就一定能保证是最优解. 所以我们只要想办法简化这个模拟移物品的过程,看完了题解后,发现可以这么想,我们可以把两个栈头碰头的挨在一起,然后设一个指针代表两 ...
- BZOJ3192:[JLOI2013]删除物品——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3192 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的 ...
- BZOJ3192: [JLOI2013]删除物品(splay)
Description 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能够移动某堆中位于顶端的物品. ( ...
- [JLOI2013]删除物品 树状数组
当时考试时间剩下太短了然后就挂掉了..其实是个简单的数据结构. 话说一看最小还以为是动规呢.. 将两堆头对头排.比如样例就是 541|273 因为是必须有优先级次序,依次拿的话,看优先级大小相邻的两个 ...
随机推荐
- 如何在前端模版引擎开发中避免使用eval函数
前段时间,想着自己写一个简单的模版引擎,便于自己平时开发demo时使用.于是根据自己对模版引擎的理解,定义自己的模版格式,然后,根据自己定义的格式,编写处理函数,将模版标签中的字符串,解析成可执行的字 ...
- Redis客户端管理工具,状态监控工具
TreeNMS是一款Redis web客户端管理工具,采用JAVA开发,实现基于web方式对Redis数据库进行管理.监控.数据维护. 功能包括:数据库的状态监控,库表的展示,key,value的展示 ...
- 如何成为一名JAVAEE软件工程师?(前言)
笔者将会整理出一整套成为一个JAVAEE工程师的学习路线和资料.欢迎同行和网友们订阅或指正.不定期更新. 笔者在软件工作做了7年java开发,开发过ERP,CRM等应用系统并担任过项目 ...
- 【数据结构与算法】一致性Hash算法及Java实践
追求极致才能突破极限 一.案例背景 1.1 系统简介 首先看一下系统架构,方便解释: 页面给用户展示的功能就是,可以查看任何一台机器的某些属性(以下简称系统信息). 消息流程是,页面发起请求查看指定机 ...
- JAVAEE——spring03:spring整合JDBC和aop事务
一.spring整合JDBC 1.spring提供了很多模板整合Dao技术 2.spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模 ...
- 13.localStorage和sessionStorage的区别
HTMl5的sessionStorage和localStorage html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage. sessionSt ...
- c# MySqlHelper_ExecuteSqlTran
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Text;u ...
- laravel5.4+vue+element-ui配置及简单使用
前言:网上能找到的关于这个方面的教程实在是太少啦,所以踩了好多坑,特意来分享一下,原创哦.想要打包带走的小伙伴还请注明出处
- Tomcat集群搭建
关于如何搭建Tomcat集群网上还是能搜到很多相关的教程,这里结合我自己在实际应用中的操作做下备忘. 案例说明: 这里以在本机部署的2个tomcat来做集群.当然,tomcat集群可以是分布式的,而差 ...
- 什么是Hadoop
配上官方介绍 What Is Apache Hadoop? The Apache™ Hadoop® project develops open-source software for relia ...