题意

https://loj.ac/problem/534

思路

又是复杂度错误的一题,\(O(n^2\log n)\) 能过 \(15000\) 。

虽然看起来强制在线,其实是一道假的在线题。首先按时间建立线段树,先序遍历整棵树,到叶子时进行更新并回答询问。

更新时将物品当做标记,打到线段树上 ,遍历到一个节点时,都在上面做背包,往儿子走时将背包数组拷贝下来,到另一个儿子重新拷贝一次,故背包个数和深度相同。

询问时由于已经维护好了目前的背包,可以直接询问。

这就是\(\text{dfs}\) 栈的思路,在 \(\text{dfs}\) 时维护一个栈,直接将父亲的信息拿下来使用。

代码

#include<bits/stdc++.h>
#define FOR(i,x,y) for(int i=(x),i##END=(y);i<=i##END;++i)
#define DOR(i,x,y) for(int i=(x),i##END=(y);i>=i##END;--i)
#define x first
#define y second
typedef long long LL;
using namespace std;
typedef pair<int,int> pii;
const int N=15005;
const int LOGN=18;
struct Knapsack
{
LL dp[N];int n;
LL &operator [](const int x){return dp[x];}
void reset(int _n){n=_n;memset(dp,-1,sizeof(dp));dp[0]=0;}
void Zo(int v,int w){DOR(i,n,v)if(dp[i-v]!=-1)dp[i]=max(dp[i],dp[i-v]+w);}
};
Knapsack Ks[LOGN];
vector<pii>A[N<<2];
int q,maxv,T;
LL lastans; void update(int k,int L,int R,int v,int w,int l,int r)
{
if(L<=l&&r<=R){A[k].push_back(pii(v,w));return;}
int mid=(l+r)>>1;
if(L<=mid)update(k<<1,L,R,v,w,l,mid);
if(R>mid)update(k<<1|1,L,R,v,w,mid+1,r);
}
void solve(int k,int d,int l,int r)
{
Ks[d]=Ks[d-1];
FOR(i,0,(int)A[k].size()-1)Ks[d].Zo(A[k][i].x,A[k][i].y);
if(l==r)
{
int op,v,w,e;
scanf("%d",&op);
if(op==1)
{
scanf("%d%d%d",&v,&w,&e);
v-=T*lastans,w-=T*lastans,e-=T*lastans;
if(l+1<=e)update(1,l+1,e,v,w,1,q);
}
else
{
scanf("%d",&v);
v-=T*lastans;
if(Ks[d][v]==-1){puts("0 0");lastans=0;}
else{printf("1 %lld\n",Ks[d][v]);lastans=(Ks[d][v]^1);}
}
return;
}
int mid=(l+r)>>1;
solve(k<<1,d+1,l,mid);
solve(k<<1|1,d+1,mid+1,r);
} int main()
{
scanf("%d%d%d",&q,&maxv,&T);
Ks[0].reset(maxv);
solve(1,1,1,q);
return 0;
}

LOJ 534 花团(线段树+dfs栈)的更多相关文章

  1. 【题解】【LibreOJ Round #6】花团 LOJ 534 时间线段树分治 背包

    Prelude 题目链接:萌萌哒传送门(/≧▽≦)/ Solution 如果完全离线的话,可以直接用时间线段树分治来做,复杂度\(O(qv \log q)\). 现在在线了怎么办呢? 这其实是个假在线 ...

  2. HDU 5692 线段树+dfs序

    Snacks Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  3. Tsinsen A1505. 树(张闻涛) 倍增LCA,可持久化线段树,DFS序

    题目:http://www.tsinsen.com/A1505 A1505. 树(张闻涛) 时间限制:1.0s   内存限制:512.0MB    总提交次数:196   AC次数:65   平均分: ...

  4. BZOJ_3252_攻略_线段树+dfs序

    BZOJ_3252_攻略_线段树+dfs序 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏< ...

  5. 【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序

    题目大意 ​ Bob有一棵\(n\)个点的有根树,其中\(1\)号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜 ...

  6. Codeforces 781E Andryusha and Nervous Barriers 线段树 单调栈

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF781E.html 题目传送门 - CF781E 题意 有一个矩形,宽为 w ,高为 h .一开始会有 w 个 ...

  7. 洛谷P4425 转盘 [HNOI/AHOI2018] 线段树+单调栈

    正解:线段树+单调栈 解题报告: 传送门! 1551又是一道灵巧连题意都麻油看懂的题,,,,所以先解释一下题意好了,,,, 给定一个n元环 可以从0时刻开始从任一位置出发 每次可以选择向前走一步或者在 ...

  8. 线段树+单调栈+前缀和--2019icpc南昌网络赛I

    线段树+单调栈+前缀和--2019icpc南昌网络赛I Alice has a magic array. She suggests that the value of a interval is eq ...

  9. 【bzoj4817】树点涂色 LCT+线段树+dfs序

    Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...

随机推荐

  1. Spark学习之路 (十六)SparkCore的源码解读(二)spark-submit提交脚本

    一.概述 上一篇主要是介绍了spark启动的一些脚本,这篇主要分析一下Spark源码中提交任务脚本的处理逻辑,从spark-submit一步步深入进去看看任务提交的整体流程,首先看一下整体的流程概要图 ...

  2. npm 包下载的各种姿势

    最近在写Node程序的时候,突然对 npm install 的-save和-save-dev 这两个参数的使用比较混乱.其实博主在这之前对这两个参数的理解也是模糊的,各种查资料和实践后对它们之间的异同 ...

  3. system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

    elasticsearch启动时遇到的错误 这个是elasticsearch配置文件的问题. 解决办法: 在elasticsearch.yml配置文件中 添加     bootstrap.system ...

  4. 前端框架VUE----指令

    一.什么是VUE? 它是构建用户界面的JavaScript框架(让它自动生成js,css,html等) 二.怎么使用VUE? 1.引入vue.js 2.展示HTML <div id=" ...

  5. jvm 工作原理

    作为一名Java使用者,掌握JVM的体系结构也是必须的. 说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java ...

  6. 原生js上传图片时的预览

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  7. jetbrain_ia

    在激活Jetbrains旗下任意产品的时候选择激活服务器填入以下地址便可成功激活 http://idea.liyang.io 最新方法(2018.3.4) http://blog.csdn.net/w ...

  8. spring总结之二(Bean作用域、依赖注入)

    ### Bean的作用域:单例(singleton),多例(prototype) 1.单例模式:表示在任何地方使用对象,总是一个(对象是唯一的). (笔面试重点) 饿汉式 public class K ...

  9. Python Selenium element is not reachable by keyboard

    碰到这个问题,没法解决, 最后这么搞的 pcAction.move_by_offset(571, 534).click().perform() #激活输入框 driver.switch_to.acti ...

  10. Prometheus监控学习笔记之PromQL简单示例

    0x00 简单的时间序列选择 返回度量指标 http_requests_total 的所有时间序列样本数据: http_requests_total 返回度量指标名称为 http_requests_t ...