严格按题解写,看能不能形成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分治+背包的更多相关文章

  1. [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP)

    [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP) 题面 有三个人从一张N个点无重边的有向无环图上的三个点出发,每单位时间,他们分别选择当前 ...

  2. BestCoder Round #86 解题报告

    A.Price List Sol 求和查询 Code #include<cstdio> #include<algorithm> #include<iostream> ...

  3. BestCoder Round #86

    A题 Price List 巨水..........水的不敢相信. #include <cstdio> typedef long long LL; int main() { int T; ...

  4. HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002

    题目:传送门. 题意:题目说的是求期望,其实翻译过来意思就是:一个长度为 n 的数列(n>=3),按顺序删除其中每一个数,每次删除都是建立在最原始数列的基础上进行的,算出每次操作后得到的新数列的 ...

  5. BestCoder Round #86 部分题解

    Price List 题意: 有n件商品,每天只能买一件,并且会记录账本,问有多少次一定记多了? 题解: 就是求和,最后如果大于和就输出1,否则0. 代码: #include <bits/std ...

  6. HDU5807 Keep In Touch (BestCoder Round #86 D ) 分布式dp

    #include <cstdio> #include <cstring> #include <cmath> #include <vector> #inc ...

  7. HDU5806 NanoApe Loves Sequence Ⅱ (BestCoder Round #86 C)二分

    分析:大于等于m的变成1,否则变成0,预处理前缀和,枚举起点,找到第一个点前缀和大于m即可 找第一个点可以二分可以尺取 #include <cstdio> #include <cst ...

  8. HDU5805 NanoApe Loves Sequence (BestCoder Round #86 B)前后缀预处理

    分析:维护空隙的差,然后预处理前缀最大,后缀最大,扫一遍 #include <cstdio> #include <cstring> #include <cmath> ...

  9. HDU5804 Price List (BestCoder Round #86 A)水题

    分析:大于总和输出1 #include <cstdio> #include <cstring> #include <algorithm> using namespa ...

随机推荐

  1. Dreamweaver修改页面编码

    想修改当前页面编码,可以选择菜单 :修改->页面属性->标题/编码 想设置新建页面默认编码,可以选择菜单: 编辑->首选参数->新建文档 的默认编码里面修改

  2. WPF之RichTextBox丢失光标仍然选中文本

    描述:开发中完成了一个类似于Word的悬浮工具栏功能,选中文本之后可以自动弹出一个工具栏.可以修改字体.字体大小等功能,问题来了,我发现当去进行操作的时候原本选中的RichTextBox的内容的颜色会 ...

  3. Java数组排序

    Java数组排序Arrays.sort,以及Comparator接口的用法 有的时候需要对数组里的element进行排序.当然可以自己编写合适的排序方法,但既然java包里有自带的Arrays.sor ...

  4. 路径名称和struts.xml配置不一致导致struts2报404

    struts.xml中写的是<result name="...">authorityInterceptor/xxx.jsp</result> 但是实际的文件 ...

  5. eclipse使用replace命令替换整个project/workspace的某个字符串

    比如说为了在调试的时候方便,我的应用程序中有很多System.out.println() 调试好了,要发布了,如何把这些一次性注释掉呢?见下图

  6. 卷积神经网络(CNN)

    1. 概述 卷积神经网络是一种特殊的深层的神经网络模型,它的特殊性体现在两个方面,一方面它的神经元间的连接是非全连接的, 另一方面同一层中某些神经元之间的连接的权重是共享的(即相同的).它的非全连接和 ...

  7. 等宽格子堆砌 js

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Android应用开发学习笔记之事件处理

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android提供的事件处理机制分为两类:一是基于监听的事件处理:二是基于回调的事件处理.对于基于监听的事件处理,主 ...

  9. git服务器gitlab之搭建和使用--灰常好的git服务器【转】

    转自:http://blog.csdn.net/zy416548283/article/details/38057925 git服务器比较有名的是gitosis和gitolite,这两个管理和使用起来 ...

  10. 3.cadence创建元器件

    1.打开OrCAD Capture 然后可以新建工程,也可以直接建library (打开  后 选择:OrCAD Capture CIS) 背景颜色 Options > Preferences ...