严格按题解写,看能不能形成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. MakeObjectInstance的简单理解

    昨天把MakeObjectInstance的代码详细研究了一下,当然还有众多前辈高手们的帮助,终于大致搞明白了是怎么回事.但是给我顿悟的,不是高手们的帖子,而是来自我自己的一个疑惑,TObjectIn ...

  2. http://my.oschina.net/u/2007041/blog/508520

    http://my.oschina.net/u/2007041/blog/508520

  3. Java中的Enum的使用与分析

    使用name()方法和valueOf(String)方法可以在枚举类型对象和字符串之间方便得转换.如果valueOf(String)方法的参数不是该枚举类型合法的字符串,则会抛出IllegalArgu ...

  4. org.opencv.android.JavaCameraView 摄像机方向的问题

    ——> org.opencv.android.JavaCameraView 摄像机方向的问题 ref: http://www.tuicool.com/articles/q6vUvqB 注意:一般 ...

  5. Android实现网络多线程文件下载

    实现原理 (1)首先获得下载文件的长度,然后设置本地文件的长度. (2)根据文件长度和线程数计算每条线程下载的数据长度和下载位置. 如:文件的长度为6M,线程数为3,那么,每条线程下载的数据长度为2M ...

  6. hdu 1829-A Bug's LIfe(简单带权并查集)

    题意:Bug有两种性别,异性之间才交往, 让你根据数据判断是否存在同性恋,输入有 t 组数据,每组数据给出bug数量n, 和关系数m, 以下m行给出相交往的一对Bug编号 a, b.只需要判断有没有, ...

  7. 【首先膜拜大湿】poj-2386-Lake Counting-DFS模板题

    Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16802   Accepted: 8523 De ...

  8. Android内存管理(1)WRANGLING DALVIK: MEMORY MANAGEMENT IN ANDROID PART 1

    from : http://www.raizlabs.com/dev/2014/03/wrangling-dalvik-memory-management-in-android-part-1-of-2 ...

  9. Tomcat,Jboss,Glassfish等web容器比较选型

    概述 Web容器是一种服务调用的规范,J2EE运用了大量的容器和组件技术来构建分层的企业应用.在J2EE规范中,相应的有WEB Container和EJB Container等. Web容器给处于其中 ...

  10. 搜索浅谈(Elasticsearch和Lucene4分享)

    刚刚过去的双11,真是给线下运营商好好上了一课.当今的互联网真是炙手可热,大家对互联网的热情是如此之高.相信电商之间的竞争将更加的激烈和残酷,不过,搜索,作为用户体验很重要的一点,各大电商也做的越来越 ...