\(\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.改试卷的更多相关文章

  1. [Python设计模式] 第10章 怎么出试卷?——模版方法模式

    github地址:https://github.com/cheesezh/python_design_patterns 题目 小时候数学老师的随堂测验,都是老师在黑板上写题目,学生在下边抄,然后再做题 ...

  2. .NET领域驱动设计—实践(穿过迷雾走向光明)

    阅读目录 开篇介绍 1.1示例介绍 (OnlineExamination在线考试系统介绍) 1.2分析.建模 (对真实业务进行分析.模型化) 1.2.1 用例分析 (提取系统的所有功能需求) 1.3系 ...

  3. .NET领域驱动设计—初尝(三:穿过迷雾走向光明)

    开篇介绍 在开始这篇富有某种奇妙感觉的文章之旅时我们先短暂的讨论一下关于软件开发方法论的简要: 纵观软件开发方法论,从瀑布模型.螺旋模型.RUP(统一软件开发过程).XP(极限编程).Agile(敏捷 ...

  4. [转] .NET领域驱动设计—实践(穿过迷雾走向光明)

    阅读目录 开篇介绍 1.1示例介绍 (OnlineExamination在线考试系统介绍) 1.2分析.建模 (对真实业务进行分析.模型化) 1.2.1 用例分析 (提取系统的所有功能需求) 1.3系 ...

  5. [办公自动化]利用Acrobat完成问卷调查或者考试卷

    整体思路:(软件环境Acrobat) 1.制作问卷. 采用word制作,制作基础页面,然后倒入.自己亲测时,发现一般的文字域是可以的,但是单选按钮就不能导入. 如果是考试卷,可以利用word制作基础页 ...

  6. [jzoj]4216.【NOIP2015模拟9.12】平方和

    Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...

  7. [jzoj]1729.blockenemy

    Link https://jzoj.net/senior/#main/show/1729 Description 你在玩电子游戏的时候遇到了麻烦...... 你玩的游戏是在一个虚拟的城市里进行,这个城 ...

  8. JavaSE 软件工程师 认证考试试卷2

    JavaSE 软件工程师 认证考试试卷   笔试   考试时间150分钟 总分 100分   姓    名_______________________ 身份证号___________________ ...

  9. Java 初级软件工程师 认证考试试卷1

    Java 初级软件工程师 认证考试试卷   笔试(A卷)   考试时间150分钟 总分 100分     姓    名_______________________ 身份证号_____________ ...

  10. JZOJ| 5910. DuLiu

    Description          LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃圾题目者也,教人半懂不懂的.因为他姓李,别人便从QQ群上的“毒瘤李F ...

随机推荐

  1. Sql Server日期转汉字字符串

    以下脚本转至互联网,增加了自己需要的功能并改成了函数的方式 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ================== ...

  2. ssh框架中文保存数据库MySQL乱码

    检查后台获取前端页面数据打印到console控制台无乱码:tomcat配置没有问题: 检查MySQL数据库编码设置:字符集:utf8 -- UTF-8 Unicode,排序规则:utf8_genera ...

  3. SSH(一)架包的引入

    一年多未使用了,有些东西真的会忘. 一.ssh的图形化记忆运作流程 二.Struts2.hibernate.spring需要引用的jar包 Struts2: 基本开发:struts-2.3.32\ap ...

  4. 【Java SE进阶】Day08 File类、递归

    一.File类 1.概述java.io.File 文件和路径的抽象表示 用于文件和目录的创建.查找和删除等 分类 file--文件 directory--文件夹/目录 path--路径 2.静态成员变 ...

  5. 【Java SE进阶】Day06 线程、同步

    一.线程 1.多线程原理 流程图 内存图解说明 创建线程的方式 继承Thread类 实现 Runnable接口 2.继承Thead类 3.实现Runnable接口 实现接口,重写run方法 最终均需要 ...

  6. Selenium4+Python3系列(十二) - 测试框架的设计与开发

    前言 自己从未没想过能使用python来做自动化测试框架的设计.开发. 可能有人会好奇说,六哥,你怎么也用python写测试框架了? 领导说: python你也没有实际工作经验,可能就是自己自学的. ...

  7. 安装es可视化软件Kibana

    一 Kibana介绍 Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作. 您.可以使用 Kibana 对 Ela ...

  8. C/C++随堂笔记

    注释:行注释 块注释: (1)#if 0 #endif (2)/*     */ <>:表示系统文件 <stdlib.h>+syetem 调用windows中的程序 QT中 c ...

  9. react 高效高质量搭建后台系统 系列 —— 请求数据

    其他章节请看: react 高效高质量搭建后台系统 系列 请求数据 后续要做登录模块(主页),需要先和后端约定JSON数据格式,将 axios 进行封装,实现本地的数据模拟 mockjs. Tip:s ...

  10. 如何通过Java代码在PDF中插入、替换或删除图像?

    图文并茂的内容往往让人看起来更加舒服,如果只是文字内容的累加,往往会使读者产生视觉疲劳.搭配精美的文章配图则会使文章内容更加丰富,增加文章可读性的同时,也能提升用户体验.但由于PDF文档安全性较高,不 ...