HDU5808Price List Strike Back (BestCoder Round #86 E) cdq分治+背包

严格按题解写,看能不能形成sum,只需要分割当前sum怎么由两边组成就好
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 2e4+;
int f[N][],g[N][];
int ret[N*],v[N],d[N],T,n,m;
struct Que
{
int l,r,c,sum,id;
} p[N*];
void cdq(int l,int r,int x,int y)
{
int mid=(l+r)>>;
vector<Que>lf,rt,cur;
lf.clear(),rt.clear(),cur.clear();
for(int i=x; i<=y; ++i)
{
if(p[i].l>mid)rt.push_back(p[i]);
else if(p[i].r<mid)lf.push_back(p[i]);
else cur.push_back(p[i]);
}
if(cur.size())
{
for(int i=; i<=; ++i)f[mid][i]=g[mid][i]=INF;
f[mid][v[mid]]=d[mid];
for(int i=mid-; i>=l; --i)
{
for(int j=; j<=; ++j)
{
if(j>=v[i])
{
if(j-v[i]==)f[i][j]=min(f[i+][j],d[i]);
else f[i][j]=min(f[i+][j],max(f[i+][j-v[i]],d[i]));
}
else f[i][j]=f[i+][j];
}
}
for(int i=mid+; i<=r; ++i)
{
for(int j=; j<=; ++j)
{
if(j>=v[i])
{
if(j-v[i]==)g[i][j]=min(g[i-][j],d[i]);
else g[i][j]=min(g[i-][j],max(g[i-][j-v[i]],d[i]));
}
else g[i][j]=g[i-][j];
}
}
for(int i=; i<cur.size(); ++i)
{
if(cur[i].r==mid)
{
if(f[cur[i].l][cur[i].sum]>cur[i].c)ret[cur[i].id]=;
continue;
}
bool flag=false;
for(int j=; j<=cur[i].sum; ++j)
{
int dis;
if(!j)dis=g[cur[i].r][cur[i].sum-j];
else if(j==cur[i].sum)dis=f[cur[i].l][j];
else dis=max(f[cur[i].l][j],g[cur[i].r][cur[i].sum-j]);
if(dis<=cur[i].c)
{
flag=true;
break;
}
}
if(!flag)ret[cur[i].id]=;
}
}
int cnt=x-;
if(lf.size())
{
for(int i=; i<lf.size(); ++i)
p[++cnt]=lf[i];
cdq(l,mid,x,cnt);
}
if(rt.size())
{
x=cnt+;
for(int i=; i<rt.size(); ++i)
p[++cnt]=rt[i];
cdq(mid+,r,x,cnt);
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=; i<=n; ++i)scanf("%d",&v[i]);
for(int i=; i<=n; ++i)scanf("%d",&d[i]);
for(int i=; i<=m; ++i)
{
scanf("%d%d%d%d",&p[i].l,&p[i].r,&p[i].c,&p[i].sum);
p[i].id=i;
ret[i]=;
}
cdq(,n,,m);
for(int i=; i<=m; ++i)printf("%d",ret[i]);
printf("\n");
}
return ;
}
HDU5808Price List Strike Back (BestCoder Round #86 E) cdq分治+背包的更多相关文章
- [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP)
[HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP) 题面 有三个人从一张N个点无重边的有向无环图上的三个点出发,每单位时间,他们分别选择当前 ...
- BestCoder Round #86 解题报告
A.Price List Sol 求和查询 Code #include<cstdio> #include<algorithm> #include<iostream> ...
- BestCoder Round #86
A题 Price List 巨水..........水的不敢相信. #include <cstdio> typedef long long LL; int main() { int T; ...
- HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
题目:传送门. 题意:题目说的是求期望,其实翻译过来意思就是:一个长度为 n 的数列(n>=3),按顺序删除其中每一个数,每次删除都是建立在最原始数列的基础上进行的,算出每次操作后得到的新数列的 ...
- BestCoder Round #86 部分题解
Price List 题意: 有n件商品,每天只能买一件,并且会记录账本,问有多少次一定记多了? 题解: 就是求和,最后如果大于和就输出1,否则0. 代码: #include <bits/std ...
- HDU5807 Keep In Touch (BestCoder Round #86 D ) 分布式dp
#include <cstdio> #include <cstring> #include <cmath> #include <vector> #inc ...
- HDU5806 NanoApe Loves Sequence Ⅱ (BestCoder Round #86 C)二分
分析:大于等于m的变成1,否则变成0,预处理前缀和,枚举起点,找到第一个点前缀和大于m即可 找第一个点可以二分可以尺取 #include <cstdio> #include <cst ...
- HDU5805 NanoApe Loves Sequence (BestCoder Round #86 B)前后缀预处理
分析:维护空隙的差,然后预处理前缀最大,后缀最大,扫一遍 #include <cstdio> #include <cstring> #include <cmath> ...
- HDU5804 Price List (BestCoder Round #86 A)水题
分析:大于总和输出1 #include <cstdio> #include <cstring> #include <algorithm> using namespa ...
随机推荐
- 也谈SWD接口协议分析
这几日看到坛里有几个关于SWD协议相关的文章,自己也尝试了下,有点体会,也有些疑惑,写出来与大家分享和交流下. 以下我的模拟SWD接口的板子简称为Host,目标MCU(即我要连接的板子)简称为T ...
- IOS 的loadView 及使用loadView中初始化View注意的问题。(死循环并不可怕)
在XCode 4.2后,我基本上的应用都不使用Xib文件了,虽然xib文件有很多好趣,可以快速免代码构建视窗,可以减少好多代码构建带来的麻烦,其实能用xib还是不错的,主要是我的机器打开xib来编辑时 ...
- MyBatis学习总结_13_Mybatis查询之resultMap和resultType区别
MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性 ...
- Java:异常的处理
异常分两种大的异常类型,运行时异常和受检查异常. 用户既可以使用系统的异常类来处理异常信息,也可以创建系统的异常类的子类来自定义异常,这种方式比较灵活,虚拟机可以报出自己设置的异常信息,清楚明白. 1 ...
- OSI
1.物理(硬:HUB位) *****************信道接口型状.尺寸.引脚.排列电压.电流.阻抗.波形.速率及平衡单.半双.全双工RS232,RS422,RS423,RS485X.25.X. ...
- Database File Management ->> Shrink Data File
今天在开发环境遇到了一个问题,我们发现服务器上的硬盘空间满了,查看了下发现这个盘存放的数据库文件应该是来源一个并非很大的库才对.检查之后发现这个数据库下的某个数据文件占了盘符下70%的空间,而大部分数 ...
- SQL经典问题 找出连续日期及连续的天数
转自:http://bbs.csdn.net/topics/360019248 如何取到每段连续日期的起始终止日期以及持续天数及起始日期距上一期终止日期的天数,能否用一句sql实现?备注:数据库环境是 ...
- iReport —— 使用 JavaBean 作为数据源
在制作报表时,想直接使用Java代码提供数据. 网上找了一些文章,很多都是用Servlet做的.我不是想通过浏览器来观察它的输出.我想使用iReport的动态连接直接预览. 结合一些资料,加上自己的摸 ...
- SQL SERVER 常用字符类型的区别
长度为 n 个字节的固定长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为 n 个字节.char 在 SQL-92 中的同义词为 character. ...
- Redis的过滤器(SCAN)功能
在写另一篇文章( link )的时候,涉及到过滤器(filter)功能.以前没有接触过,整理如下. 主要参考这两篇: http://blog.csdn.net/u011510825/article/d ...