Prelude

题目链接:萌萌哒传送门(/≧▽≦)/


Solution

如果完全离线的话,可以直接用时间线段树分治来做,复杂度\(O(qv \log q)\)。

现在在线了怎么办呢?

这其实是个假在线,因为每个物品的删除时间已经给你了,所以还是直接用时间线段树分治来做。

其实我是重点想谈一下复杂度的,\(O(n^{2} \log n)\)的复杂度居然都可以出到\(15000\),而且居然还跑的飞快?


Code

  1. #include <cstring>
  2. #include <algorithm>
  3. #include <cstdio>
  4. #include <utility>
  5. #include <vector>
  6. using namespace std;
  7. typedef long long ll;
  8. typedef unsigned int uint;
  9. typedef unsigned long long ull;
  10. typedef long double ldouble;
  11. typedef pair<int,int> pii;
  12. typedef vector<pii>::iterator viter;
  13. const int MAXN = 15010;
  14. const int LOGN = 17;
  15. const int INF = 0x3f3f3f3f;
  16. int _w;
  17. inline void bmin( int &a, int b ) {
  18. a = b < a ? b : a;
  19. }
  20. inline void bmax( int &a, int b ) {
  21. a = b > a ? b : a;
  22. }
  23. int q, maxv, T, lastans;
  24. struct Knapsack {
  25. int f[MAXN];
  26. void init() {
  27. for( int i = 0; i <= maxv; ++i )
  28. f[i] = -INF;
  29. f[0] = 0;
  30. }
  31. void insert( int v, int w ) {
  32. for( int i = maxv-v; i >= 0; --i )
  33. bmax( f[i+v], f[i]+w );
  34. }
  35. const int &operator[]( int i ) const {
  36. return f[i];
  37. }
  38. int &operator[]( int i ) {
  39. return f[i];
  40. }
  41. };
  42. vector<pii> item[MAXN<<2];
  43. Knapsack f[LOGN];
  44. int qv[MAXN];
  45. pii ins;
  46. int ql, qr;
  47. void insert( int o, int L, int R ) {
  48. if( L >= ql && R <= qr ) {
  49. item[o].push_back(ins);
  50. } else {
  51. int M = (L+R)>>1, lc = o<<1, rc = lc|1;
  52. if( ql <= M ) insert(lc, L, M);
  53. if( qr > M ) insert(rc, M+1, R);
  54. }
  55. }
  56. void query( int i, int d ) {
  57. if( qv[i] != -1 ) {
  58. int v = qv[i];
  59. if( f[d][v] < 0 ) {
  60. puts("0 0");
  61. lastans = 0;
  62. } else {
  63. printf( "1 %d\n", f[d][v] );
  64. lastans = T * (f[d][v] ^ 1);
  65. }
  66. }
  67. if( i == q ) return;
  68. int op;
  69. _w = scanf( "%d", &op );
  70. if( op == 1 ) {
  71. int v, w, e;
  72. _w = scanf( "%d%d%d", &v, &w, &e );
  73. v -= lastans, w -= lastans, e -= lastans;
  74. ins = pii(v, w), ql = i+1, qr = e;
  75. insert(1, 0, q);
  76. } else {
  77. _w = scanf( "%d", qv+i+1 );
  78. qv[i+1] -= lastans;
  79. }
  80. }
  81. void solve( int o, int L, int R, int d ) {
  82. for( viter it = item[o].begin(); it != item[o].end(); ++it )
  83. f[d].insert(it->first, it->second);
  84. if( L == R ) {
  85. query(L, d);
  86. } else {
  87. int M = (L+R)>>1, lc = o<<1, rc = lc|1;
  88. f[d+1] = f[d];
  89. solve(lc, L, M, d+1);
  90. f[d+1] = f[d];
  91. solve(rc, M+1, R, d+1);
  92. }
  93. }
  94. int main() {
  95. _w = scanf( "%d%d%d", &q, &maxv, &T );
  96. f[0].init();
  97. memset(qv, -1, sizeof qv);
  98. solve(1, 0, q, 0);
  99. return 0;
  100. }

【题解】【LibreOJ Round #6】花团 LOJ 534 时间线段树分治 背包的更多相关文章

  1. 2019.01.13 loj#6515. 贪玩蓝月(线段树分治+01背包)

    传送门 题意简述:有一个初始为空的双端队列,每次可以在队首和队尾插入或弹出一个二元组(wi,vi)(w_i,v_i)(wi​,vi​),支持询问从当前队列中选取若干个元素是的他们的和对 MODMODM ...

  2. LOJ 121 「离线可过」动态图连通性——LCT维护删除时间最大生成树 / 线段树分治

    题目:https://loj.ac/problem/121 离线,LCT维护删除时间最大生成树即可.注意没有被删的边的删除时间是 m+1 . 回收删掉的边的节点的话,空间就可以只开 n*2 了. #i ...

  3. LOJ 2585 「APIO2018」新家 ——线段树分治+二分答案

    题目:https://loj.ac/problem/2585 算答案的时候要二分! 这样的话,就是对于询问位置 x ,二分出一个最小的 mid 使得 [ x-mid , x+mid ] 里包含所有种类 ...

  4. LOJ#121. 「离线可过」动态图连通性(线段树分治)

    题意 板子题,题意很清楚吧.. Sol 很显然可以直接上LCT.. 但是这题允许离线,于是就有了一个非常巧妙的离线的做法,好像叫什么线段树分治?? 此题中每条边出现的位置都可以看做是一段区间. 我们用 ...

  5. LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset

    题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...

  6. 【线段树分治 01背包】loj#6515. 「雅礼集训 2018 Day10」贪玩蓝月

    考试时候怎么就是没想到线段树分治呢? 题目描述 <贪玩蓝月>是目前最火爆的网页游戏.在游戏中每个角色都有若干装备,每件装备有一个特征值 $w$ 和一个战斗力 $v$ .在每种特定的情况下, ...

  7. UOJ46 【清华集训2014】玄学 【时间线段树】

    题目链接:UOJ 这题的时间线段树非常的妙. 对时间建立线段树,修改的时候在后面加,每当填满一个节点之后就合并进它的父亲. 对于一个节点维护序列,发现这是一个分段函数,合并就是归并排序.于是就形成了差 ...

  8. hdu 5195 DZY Loves Topological Sorting BestCoder Round #35 1002 [ 拓扑排序 + 优先队列 || 线段树 ]

    传送门 DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131 ...

  9. Codeforces Round #603 (Div. 2) E. Editor 线段树

    E. Editor The development of a text editor is a hard problem. You need to implement an extra module ...

随机推荐

  1. ES6的新特性(14)——Iterator 和 for...of 循环

    Iterator 和 for...of 循环 Iterator(遍历器)的概念 JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Ma ...

  2. MacBook Pro 15寸常见问题及修复

    苹果MacBook Pro更换SSD硬盘攻略教程 MacBook pro开机黑屏解决 苹果电脑 MAC PRO 开机黑屏了 MacBook Pro 开机后黑屏,怎么办啊 如果 Mac 无法开机 Mac ...

  3. 2018软工实践—Alpha冲刺(5)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助测试的进行 测试项目运行的服务器环境 ...

  4. CentOS 7 网卡命名修改为eth0格式

    Linux 操作系统的网卡设备的传统命名方式是 eth0.eth1.eth2等,而 CentOS7 提供了不同的命名规则,默认是基于固件.拓扑.位置信息来分配.这样做的优点是命名全自动的.可预知的,缺 ...

  5. 安装DHCP 服务器 指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码

    DHCP服务详解 前言:动态主机配置协议,给局域网内的主机分配IP地址,子网掩码,网关,DNS ARP协议 arp: address resolveing protocol (地址解析协议) 实现:I ...

  6. Hash(散列函数)简单应用引出解决散列冲突的四种方法

    商店允许顾客通过电话订购商品,并在几天后上门自取.商店的数据库使用客户的电话号码作为其检索的关键字(客户知道自己的电话号码,而且这些电话关键字几乎是唯一的).如何组织商店的数据库,以允许更加高效的进行 ...

  7. c 结构体读取与保存

    1.结构体保存到文本 #include <stdio.h> #include <stdlib.h> #include <string.h> #define max ...

  8. PHP中类中成员及常量

    类中成员概述 面向对象编程,是需要通过“对象”去做什么事情(以完成某种任务): 而: 对象总是来源于类: 所以: 面向对象的编程,一切都是从定义类开始: 类中成员分为3大类: 属性: 方法: 常量: ...

  9. Vue.js 判断对象属性是否存,不存在添加

    Vue.set是可以对对象添加属性的,这里item对象添加一个checked属性 //if(typeof item.checked=='undefined'){if(!this.item.checke ...

  10. AtCoder Regular Contest 074 瞎打记

    (很长时间没更新了>_<) 由于机房的网总是奥妙重重,开考30多分钟之后我才登进去... 然后发现T1是个简单枚举,1A.T2是个简单优先队列,1A.T3似乎需要一点推导,先看了T4发现是 ...