link.

感觉好久没写过题解了, 这就是永远在骚动的得不到吧.

星尘 infinity 真的非常行, 就算是 ja voicebase 都不知道吊打那群日 v 多少圈. 我推荐你们都去听一听.

chin voicebase 更是重量级, 乱杀 vs 那堆. 不得不说个体技术力质的进步才是社会发展的关键, 什么大家进步了总体就进步了就是扯淡.

当然也不能像赫鲁晓夫那群天才一样鼓吹唯生产力论, 但是用 \(+\infty\) 的 p 们确实交出了优秀的答卷, 时至今日的格局只能说是原本基础决定的.


首先如果没有删除操作的话, 这题可以 parallel search 随便做做了. 加上删除操作再套个 segment tree beats 就行.


题解大概就是这样, 我主要来说下这个 segment tree beats. 首先这里没有必要真的写一个出来, 因为注意到是单点询问. 但是这里的线段树有一些不同于传统的线段树, 尽管传统线段树也是一棵 leafy tree, 但是这里树的非叶结点上是没有信息需要维护的. 可以把 lazy propagation 和你维护的幺半群放到一个数组来写.

#include <bits/stdc++.h>
using namespace std;
using i64 = int64_t; const i64 inf = 1e9;
int N, M, Q, sz, h, ans[250100];
i64 dat[250100];
struct rec {
i64 p, q;
} lz[524388];
struct req {
i64 a, b, c, d;
} q[250100];
void add(int x, i64 v) {
for (; x <= N + 1; x += x & -x) dat[x] += v;
}
void add(int l, int r, i64 v) { add(l, v), add(r + 1, -v); }
i64 sum(i64 x) {
i64 res = 0;
for (; x; x -= x & -x) res += dat[x];
return res;
}
rec composition(rec f, rec v) { return {v.p + f.p, max(v.q + f.p, f.q)}; }
void propagate(int x, rec f) { lz[x] = composition(f, lz[x]); }
void push(int x) {
propagate(x * 2, lz[x]), propagate(x * 2 + 1, lz[x]), lz[x] = {0, -inf};
}
void add(int l, int r, rec f) {
assert(0 <= l && l <= r && r <= N);
if (l == r) return;
l += sz, r += sz;
for (int i = h; i >= 1; --i) {
if (((l >> i) << i) != l) push(l >> i);
if (((r >> i) << i) != r) push((r - 1) >> i);
}
for (; l < r; l >>= 1, r >>= 1) {
if (l & 1) propagate(l++, f);
if (r & 1) propagate(--r, f);
}
}
i64 get(i64 x) {
assert(0 <= x && x < N);
for (i64 i = h; i >= 1; --i) push((x + sz) >> i);
return max(lz[x + sz].p, lz[x + sz].q);
} void dac(int l, int r, const vector<int>& id) {
if (id.empty()) return;
if (l == r) {
for (auto&& it : id) ans[it] = l;
return;
}
int mid = (l + r) / 2;
for (int i = l; i <= mid; ++i)
if (q[i].c && q[i].d) add(q[i].a, q[i].b, q[i].d);
vector<int> ql, qr;
for (auto&& it : id) (sum(q[it].a) >= q[it].b ? ql : qr).emplace_back(it);
dac(mid + 1, r, qr);
for (int i = l; i <= mid; ++i)
if (q[i].c && q[i].d) add(q[i].a, q[i].b, -q[i].d);
dac(l, mid, ql);
} signed main() {
ios::sync_with_stdio(0), cin.tie(0);
cin >> N >> M >> Q;
h = ceil(log2(N)), sz = 1 << h;
for (int i = 0; i <= N; ++i) lz[i + sz] = {0, -inf};
vector<int> is;
for (i64 o, l, r, c, k, i = 1; i <= Q; ++i) {
cin >> o >> l >> r, c = k = 0;
if (o == 1)
cin >> c >> k, add(l, r, k), add(l - 1, r, {k, 0});
else if (o == 2)
cin >> k, add(l - 1, r, {-k, 0});
else
r += sum(l) - get(l - 1), is.emplace_back(i);
q[i] = {l, r, c, k};
}
memset(dat, 0, sizeof(dat)), dac(1, Q + 1, is);
for (int i = 1; i <= Q; ++i)
if (q[i].c == 0 && q[i].d == 0)
cout << q[ans[i] > i ? 0 : ans[i]].c << "\n";
return 0;
}

「loj - 3489」「joisc 2021 day 1」Food Court的更多相关文章

  1. Solution -「JOISC 2021」「LOJ #3489」饮食区

    \(\mathcal{Description}\)   Link.   呐--不想概括题意,自己去读叭~ \(\mathcal{Solution}\)   如果仅有 1. 3. 操作,能不能做?    ...

  2. Loj #2731 「JOISC 2016 Day 1」棋盘游戏

    Loj 2731 「JOISC 2016 Day 1」棋盘游戏 JOI 君有一个棋盘,棋盘上有 \(N\) 行 \(3\) 列 的格子.JOI 君有若干棋子,并想用它们来玩一个游戏.初始状态棋盘上至少 ...

  3. 【LOJ#6066】「2017 山东一轮集训 Day3」第二题(哈希,二分)

    [LOJ#6066]「2017 山东一轮集训 Day3」第二题(哈希,二分) 题面 LOJ 题解 要哈希是很显然的,那么就考虑哈希什么... 要找一个东西可以表示一棵树,所以我们找到了括号序列. 那么 ...

  4. 「LOJ 556 Antileaf's Round」咱们去烧菜吧

    「LOJ 556 Antileaf's Round」咱们去烧菜吧 最近在看 jcvb 的生成函数课件,顺便切一切上面讲到的内容的板子题,这个题和课件上举例的背包计数基本一样. 解题思路 首先列出答案的 ...

  5. [LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC

    [LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC 试题描述 九条可怜是一个爱玩游戏的女孩子. 最近她在玩一个无双割草类的游戏,平面上有 \(n\) 个敌人,每一个敌人的坐标为 ...

  6. 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie

    题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1​​≤r​1​​<l​2​​≤r​2​​≤N,x⨁yx\bigoplus yx⨁y 表示 ...

  7. 「LOJ#10056」「一本通 2.3 练习 5」The XOR-longest Path (Trie

    #10056. 「一本通 2.3 练习 5」The XOR-longest Path 题目描述 原题来自:POJ 3764 给定一棵 nnn 个点的带权树,求树上最长的异或和路径. 输入格式 第一行一 ...

  8. LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)

    LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...

  9. 「JOISC 2016 Day 1」棋盘游戏

    「JOISC 2016 Day 1」棋盘游戏 先判无解:第1,3行有连续的空格或四个角有空格. 然后可以发现有解的情况第1,3行可以在任意时间摆放. 对于某一列,若第2行放有棋子,那么显然可以把棋盘分 ...

  10. FileUpload控件「批次上传 / 多档案同时上传」的范例--以「流水号」产生「变量名称」

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819. ...

随机推荐

  1. Vue——动态组件、插槽、Vue-cli创建项目、Vue项目目录结构、编写规范、es6导入导出语法

    动态组件 // <component :is="who"></component> // component标签的is属性等于组件名字,这里就会显示这个组件 ...

  2. 2023-06-13:统计高并发网站每个网页每天的 UV 数据,结合Redis你会如何实现?

    2023-06-13:统计高并发网站每个网页每天的 UV 数据,结合Redis你会如何实现? 答案2023-06-13: 选用方案:HyperLogLog 如果统计 PV (页面浏览量)那非常好办,可 ...

  3. 国标GB28181协议客户端开发(一)整体流程和技术选型

    国标GB28181协议客户端开发(一)整体流程和技术选型 本系列文章将介绍国标GB28181协议设备端的开发过程.本文旨在探讨整体设计和技术选型方面的考虑,为开发人员提供指导和参考.文章将从设备端开发 ...

  4. Ryu控制器教程

    RYU不要使用apt的方法安装,这样的安装是不完整的, 并且相关文件不易查找. 1.下载ryu源码 cd cd Desktop git clone https://gitee.com/lpm-123/ ...

  5. Bellman-Ford算法及SPFA算法的思路及进一步优化

    Bellman-Ford算法 算法 以边为研究对象的最短路算法. 应用场景 有负边权的最短路问题. 负环的判定. 算法原理 \(n\) 个点的最短路径最多经过 \(n - 1\) 条边. 每条边要么经 ...

  6. MyBatis使用注解开发(及Sqlsession连接器的本质)

    使用注解开发 底层实现机制是反射和,动态代码.反射可以获得这个类的方法属性还可以创建对象,执行方法. 面向接口编程 之前学过,面向对象编程,也学习过接口.但是真正的开发中,很多时候我们会选择面向接口编 ...

  7. Python中的弱引用与基础类型支持情况探究

    背景 最近有一个业务场景需要用Python自行实现一个简单的LRU cache,不可避免的接触到了弱引用这一概念,这里记录一下. 强引用 Python内存回收由垃圾回收器自动管理,当一个对象的引用计数 ...

  8. Redis 集群偶数节点跨地域部署之高可用测试

    笔者目前所在公司存在多套 Redis 集群: A 集群 主 + 从 共 60 个分片,部署在 3 + 3 台物理机上,每台机器各承载 10 个端口 主库 30 个端口在广州,从库 30 个端口在中山 ...

  9. shell: xcall

    #!/bin/bash ips=( 1.1.1.2 1.1.1.1 ) port= user= passwd= for i in ${ips[@]} do echo "== $i ==&qu ...

  10. 这可能是前端处理excel最好的工具了

    大家好,我是程序视点的小二哥! 今天小二哥要分享的是一个纯前端实现读取和导出excel文件的工具库:ExcelJS ExcelJs 简介 功能十分简单: 读取,操作并写入电子表格数据和样式到 XLSX ...