首页 > 其他分享 >JZOJ 7685. 【2022.10.06冲剌NOIP2022模拟】奇怪的函数(function)

JZOJ 7685. 【2022.10.06冲剌NOIP2022模拟】奇怪的函数(function)

时间:2022-10-06 15:12:10浏览次数:60  
标签:function 06 JZOJ int seg y1 y0 x0 x1

\(\text{Solution}\)

观察到关于 \(x\) 的函数在 \(n\) 个操作之后一定是这样的:
一段水平直线加上一段斜率为 \(1\) 的直线再加上一段水平直线
于是线段树维护这个分段函数即可
因为我是用斜率为 \(1\) 的直线的起点和终点坐标反应这个函数
所以合并分段函数的时候要处理退化成一条水平直线的情况
然而考场忘了判。。。
不过这个第一次写数据结构维护分段函数呢
当然码量更少且不需要合并函数的做法是分块啦
维护每个块的函数,一次修改直接 \(O(\sqrt n)\) 重构

\(\text{Code}\)

#include <cstdio>
#include <iostream>
#define IN inline
using namespace std;

template <typename T>
IN void read(T &x) {
	x = 0; char ch = getchar(); int f = 0;
	for(; !isdigit(ch); f = (ch == '-' ? 1 : f), ch = getchar());
	for(; isdigit(ch); x = (x<<3)+(x<<1)+(ch^48), ch = getchar());
	if (f) x = ~x + 1;
}

const int N = 1e5 + 5, len = 2e8;
int n, q;

#define ls (p << 1)
#define rs (ls | 1)
#define mid (l + r >> 1)

struct SegmentTree {
	int x0, x1, y0, y1;
	IN int F(int x) {return ((x <= x0) ? y0 : ((x >= x1) ? y1 : x - x0 + y0));}
	IN int nF_max(int y) {
		return ((y < y0 || y > y1) ? -1 : ((y == y0) ? x0 : ((y == y1) ? len : y - y0 + x0)));
	}
	IN int nF_min(int y) {
		return ((y < y0 || y > y1) ? -1 : ((y == y0) ? 1 : ((y == y1) ? x1 : y - y0 + x0)));
	}
}seg[N * 4];

IN void single(int p, int op, int val) {
	seg[p].x0 = seg[p].y0 = 1, seg[p].x1 = seg[p].y1 = len;
	if (op == 1) seg[p].y0 += val, seg[p].y1 += val;
	else if (op == 2) seg[p].x1 = seg[p].y1 = val;
	else seg[p].x0 = seg[p].y0 = val;
}
IN void pushup(int p) {
	seg[p].y0 = seg[rs].y0, seg[p].y1 = seg[rs].y1;
	seg[p].x0 = seg[ls].nF_max(seg[rs].x0);
	if (seg[p].x0 == -1) seg[p].x0 = seg[ls].x0, seg[p].y0 = seg[rs].F(seg[ls].y0);
	seg[p].x1 = seg[ls].nF_min(seg[rs].x1);
	if (seg[p].x1 == -1) seg[p].x1 = seg[ls].x1, seg[p].y1 = seg[rs].F(seg[ls].y1);
	if (seg[p].y0 == seg[p].y1) seg[p].x0 = seg[p].x1 = 1;
}
void build(int p, int l, int r) {
	if (l == r) {int op, val; read(op), read(val), single(p, op, val); return;}
	build(ls, l, mid), build(rs, mid + 1, r), pushup(p);
}
void modify(int p, int l, int r, int x, int op, int val) {
	if (l == r) return single(p, op, val), void();
	((x <= mid) ? modify(ls, l, mid, x, op, val) : modify(rs, mid + 1, r, x, op, val));
	pushup(p);
}

int main() {
	freopen("function.in", "r", stdin);
	freopen("function.out", "w", stdout);
	read(n), build(1, 1, n), read(q);
	for(int op, pos, val; q; --q) {
		read(op), read(pos);
		if (op == 4) printf("%d\n", seg[1].F(pos));
		else read(val), modify(1, 1, n, pos, op, val);
	}
}

标签:function,06,JZOJ,int,seg,y1,y0,x0,x1
From: https://www.cnblogs.com/leiyuanze/p/16757658.html

相关文章

  • Cost function - deeper intuition
    Costfunction-deeperintuition标签(空格分隔):ML目录Costfunction-deeperintuition1.costfunctionwhere\(\theta_1=0\)2.costfunctionwhere\(\theta_1\neq......
  • Cost function
    Costfunction标签(空格分隔):ML目录Costfunction1.Measurementforerror2.2-Dplanedemoofthecostfunction(reviewlinearalgebra)3.goodmodel1.Measurement......
  • P4303 [AHOI2006]基因匹配
    初始方程为:\[f_{i,j}=\max(f_{i-1,j-1}+1,f_{i-1,j},f_{i,j-1})\]对于每一个\(i\)来说,只有五次由\(f_{i-1,j-1}\)来转移(组成DNA序列的每一种碱基在该序列中正好出......
  • 【luogu P5906】【模板】回滚莫队&不删除莫队
    【模板】回滚莫队&不删除莫队题目链接:luoguP5906题目大意给你一个序列,多次询问每次问一个区间,求里面相同的数的最远间隔距离。思路考虑莫队,发现加入一个点好处理,但是......
  • 06-RabbitMQ核心API-Exchange
    Exchange流程图接收消息,并根据路由键转发消息所绑定的队列Exchange属性属性含义name交换机名称type交换机类型[direct|topic|fanout......
  • 06-第三方云存储解决方案
    第三方云存储解决方案FastDFS虽然可以水平扩容,但是运维的复杂度会提高开发复杂(并不是指上传)图片增加水印,人脸识别视屏文件的后期处理阿里云OSS对象存储......
  • Caused by: org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 106; 对
    给Properties注入值报错<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2......
  • VS2022编译错误:编译器错误 C2061
    产生原因  自己在做课后练习时,讲char类型替换为了string类型,编译器报错了很多错误,具体的代码如下:golf.h#pragmaonce#include<string>//原本没有这两句会出错usin......
  • java_day06
    Java流程控制循环结构增强for循环Java5引入了一种主要用于数组或集合的增强型for循环增强型for循环格式如下:for(声明语句:表达式){//代码}声明语......
  • [Typescript] Tips: Create your own 'objectKeys' function using generics and the
    TheloosenessofObject.keyscanbearealpainpointwhenusingTypeScript.Luckily,it'sprettysimpletocreateatighterversionusinggenericsandthekey......