JZOJ 7339.改试卷
\(\text{Solution}\)
又忘了线段树分治!!
显然维护一个上凸包
发现加点和删点可以变成限制存在时间
然后把点放在线段树上,线段树下标表示时间
加点时先把点按横坐标排序,然后就可以单调队列维护每个线段树节点的上凸包
询问再按斜率排序,这样可以弹点而不需要二分了
\(O(n \log n)\)
\(\text{Code}\)
#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#define re register
#define ls (p << 1)
#define rs (ls | 1)
using namespace std;
typedef long long LL;
const int N = 1e6 + 5;
const LL INF = 0x3f3f3f3f3f3f3f3f;
int n, totp, totq, bz[N];
LL ans[N];
struct point{int x, y, st, ed;}P[N];
struct que{int a, b, ti, id;}Q[N];
inline bool cmpx(point u, point v){return u.x < v.x ? 1 : (u.x == v.x ? u.y > v.y : 0);}
inline bool cmp(que u, que v){return -1.0 * u.a / u.b < -1.0 * v.a / v.b;}
inline double slope(int u, int v)
{
if (P[u].x == P[v].x) return -INF;
return 1.0 * (P[u].y - P[v].y) / (P[u].x - P[v].x);
}
inline void read(int &x)
{
x = 0; char ch = getchar();
for(; !isdigit(ch); ch = getchar());
for(; isdigit(ch); x = (x<<3) + (x<<1) + (ch^48), ch = getchar());
}
vector<int> T[N * 4];
void update(int p, int l, int r, int tl, int tr, int x)
{
if (tl <= l && r <= tr)
{
int sz = T[p].size();
while (sz > 1 && slope(T[p][sz - 1], T[p][sz - 2]) < slope(T[p][sz - 1], x))
T[p].pop_back(), sz = T[p].size();
T[p].push_back(x);
return;
}
int mid = (l + r) >> 1;
if (tl <= mid) update(ls, l, mid, tl, tr, x);
if (tr > mid) update(rs, mid + 1, r, tl, tr, x);
}
LL query(int p, int l, int r, int x)
{
LL res = 0;
int sz = T[p].size();
while (sz > 1 && slope(T[p][sz - 1], T[p][sz - 2]) < -1.0 * Q[x].a / Q[x].b)
T[p].pop_back(), sz = T[p].size();
if (sz) res = 1LL * Q[x].a * P[T[p][sz - 1]].x + 1LL * Q[x].b * P[T[p][sz - 1]].y;
if (l == r) return res;
int mid = (l + r) >> 1;
if (Q[x].ti <= mid) return max(res, query(ls, l, mid, x));
return max(res, query(rs, mid + 1, r, x));
}
int main()
{
freopen("paper.in", "r", stdin), freopen("paper.out", "w", stdout);
read(n);
for(re int i = 1, ty; i <= n; i++)
{
read(ty);
if (ty == 3) ++totq, read(Q[totq].a), read(Q[totq].b), Q[totq].ti = i, Q[totq].id = totq;
else if (ty == 1)
bz[i] = ++totp, read(P[totp].x), read(P[totp].y), P[totp].st = i, P[totp].ed = n;
else read(ty), P[bz[ty]].ed = i;
}
sort(P + 1, P + totp + 1, cmpx), sort(Q + 1, Q + totq + 1, cmp);
for(re int i = 1; i <= totp; i++) update(1, 1, n, P[i].st, P[i].ed, i);
for(re int i = 1; i <= totq; i++)
if (!Q[i].ti) ans[Q[i].id] = 0; else ans[Q[i].id] = query(1, 1, n, i);
for(re int i = 1; i <= totq; i++) printf("%lld\n", ans[i]);
}
JZOJ 7339.改试卷的更多相关文章
- [Python设计模式] 第10章 怎么出试卷?——模版方法模式
github地址:https://github.com/cheesezh/python_design_patterns 题目 小时候数学老师的随堂测验,都是老师在黑板上写题目,学生在下边抄,然后再做题 ...
- .NET领域驱动设计—实践(穿过迷雾走向光明)
阅读目录 开篇介绍 1.1示例介绍 (OnlineExamination在线考试系统介绍) 1.2分析.建模 (对真实业务进行分析.模型化) 1.2.1 用例分析 (提取系统的所有功能需求) 1.3系 ...
- .NET领域驱动设计—初尝(三:穿过迷雾走向光明)
开篇介绍 在开始这篇富有某种奇妙感觉的文章之旅时我们先短暂的讨论一下关于软件开发方法论的简要: 纵观软件开发方法论,从瀑布模型.螺旋模型.RUP(统一软件开发过程).XP(极限编程).Agile(敏捷 ...
- [转] .NET领域驱动设计—实践(穿过迷雾走向光明)
阅读目录 开篇介绍 1.1示例介绍 (OnlineExamination在线考试系统介绍) 1.2分析.建模 (对真实业务进行分析.模型化) 1.2.1 用例分析 (提取系统的所有功能需求) 1.3系 ...
- [办公自动化]利用Acrobat完成问卷调查或者考试卷
整体思路:(软件环境Acrobat) 1.制作问卷. 采用word制作,制作基础页面,然后倒入.自己亲测时,发现一般的文字域是可以的,但是单选按钮就不能导入. 如果是考试卷,可以利用word制作基础页 ...
- [jzoj]4216.【NOIP2015模拟9.12】平方和
Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...
- [jzoj]1729.blockenemy
Link https://jzoj.net/senior/#main/show/1729 Description 你在玩电子游戏的时候遇到了麻烦...... 你玩的游戏是在一个虚拟的城市里进行,这个城 ...
- JavaSE 软件工程师 认证考试试卷2
JavaSE 软件工程师 认证考试试卷 笔试 考试时间150分钟 总分 100分 姓 名_______________________ 身份证号___________________ ...
- Java 初级软件工程师 认证考试试卷1
Java 初级软件工程师 认证考试试卷 笔试(A卷) 考试时间150分钟 总分 100分 姓 名_______________________ 身份证号_____________ ...
- JZOJ| 5910. DuLiu
Description LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃圾题目者也,教人半懂不懂的.因为他姓李,别人便从QQ群上的“毒瘤李F ...
随机推荐
- 记一次windows10电脑连上wifi无法上网的解决问题
前言 今天下午同学的电脑能连上wifi,但是却上不了互联网 开始思考 首先想到的肯定是WiFi驱动问题,但是wifi能连上大部分的原因可能就不是驱动问题了,为了彻底排除这个因素,我用到了我的usb网卡 ...
- flutter系列之:在flutter中使用流式布局
目录 简介 Flow和FlowDelegate Flow的应用 总结 简介 我们在开发web应用的时候,有时候为了适应浏览器大小的调整,需要动态对页面的组件进行位置的调整.这时候就会用到flow la ...
- day18 批量查询与模糊查询 & 聚合函数与内置函数 & distinct关键字 & 分页查询limit & 排序order
day18 两个表student和user student id s_name s_age s_sex user id u_name u_age u_sex 批量插入 insert into stud ...
- 笔试面试--Java基础知识
一.基本概念 1.Java的优点 纯面向对象 平台无关性,"一次编译,到处运行(JVM上)",跨平台,可移植性 丰富类库:多线程.网络通信.垃圾回收 安全性(数组边界检测.byte ...
- K近邻算法(k-nearest neighbor, kNN)
K近邻算法(K-nearest neighbor, KNN) KNN是一种分类和回归方法. KNN简介 KNN模型3要素 KNN优缺点 KNN应用 参考文献 KNN简介 KNN思想 给定一个训练集 T ...
- 如何让铁威马NAS可以通过互联网访问?
当你在家或者出差去外地时候,可能要通过互联网访问你的TNAS设备,而使用远程访问功能,你可以随时随地访问你的TNAS 设备.读取你TNAS 中的文件或是对你的TNAS 设备进行配置.远程访问能给你的工 ...
- 体验 Gitea Actions
即将推出的 Gitea Actions 致力于打造一个 CI/CD 工具的标准协议,第三方 CI 系统可以基于actions 协议与 Gitea 平台集成,提供一站式管理方案.Gitea Action ...
- 2022的ShellCTF之web_WP
Extractor: 考点是SQL注入,不过数据库不是mysql,而是sqlite 首先尝试了:1' or 1=1# 尝试1' or 1=1 -- 发现有东西,使用 :order by 判断列表,知道 ...
- Generator(生成器),入门初基,Coroutine(原生协程),登峰造极,Python3.10并发异步编程async底层实现
普遍意义上讲,生成器是一种特殊的迭代器,它可以在执行过程中暂停并在恢复执行时保留它的状态.而协程,则可以让一个函数在执行过程中暂停并在恢复执行时保留它的状态,在Python3.10中,原生协程的实现手 ...
- ArcGIS工具 - 导出数据库结构
为了保证数据的一致性,数据库结构的正确性在数据库建设和管理过程中显示十分重要,在各个地理信息类项目的技术规定中都对空间数据库的结构进行明确和详细的定义,有时为了方便检查或文档编辑需要将数据结构导出,为 ...