严格按题解写,看能不能形成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. Java的Reference感觉很象C++的指针,但是区别是本质的

    Java的Reference感觉很象C++的指针,但是区别是本质的 他们相同之处在于都是含有一个地址,但是在Java中你无法对这个地址进行任何数学运算,并且这个地址你不知道,是Java Runtime ...

  2. MyBatis主键返回

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能. 比如在表的关联关系中,将数据插入主 ...

  3. Java:Collection集合类

    特点:只能用于存储对象,集合长度时可变的,集合可以存储不同类型的对象. 数组和集合类同时容器,不同的是: 1.数组虽然也可以存储对象,但是长度是固定的:集合长度时可变的. 2.数组中可以存储基本数据类 ...

  4. Tomcat运行DOM4J的时候报ClassNotFoundException

    WEB应用中一个模块用到了DOM4J,加载到TOMCAT中运行,报错如下(给出部分StackTrace): java.lang.ClassNotFoundException: org.dom4j.Do ...

  5. Elsevier 投稿各种状态总结

    Elsevier 投稿各种状态总结1. Submitted to Journal      当上传结束后,显示的状态是Submitted to Journal,这个状态是自然形成的无需处理.2. Wi ...

  6. shell中的大括号和小括号

      1.shell中的大括号和小括号   1.${var} 2.$(cmd) 3.() 和 {} 4.${var:-string}, ${var:+string},  ${var:=string}, ...

  7. jquerymobile UI使用

    <!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  8. ubuntu下如何查看用户登录及系统授权相关信息【转】

    转自:http://www.tuicool.com/articles/ia67Bj 如何在ubuntu下查看相关用户登录历史,进行系统的日志跟踪和分析,以便发现系统登录问题,进行安全策略防护呢?ubu ...

  9. MyBatis的foreach语句详解 list array map

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.it ...

  10. js 去空格函数与正则

    如果项目没有用到jQuery等框架的话,js本身又没有这样的函数,我们不得不自己写这样的函数,下面是函数的具体实现: //供使用者调用 function trim(s){ return trimRig ...