JZOJ 3469. 【NOIP2013模拟联考7】数列(sequence)
\(\text{Solution}\)
明显的 \(\text{K-D Tree}\) 基操题
提前给出了数列,那么考虑提前建好树,省去重构
但还是要开 \(O\)
\(\text{Code}\)
#pragma GCC optimize(3)
#pragma GCC optimize("inline")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse3","sse2","sse")
#pragma GCC diagnostic error "-std=c++14"
#pragma GCC diagnostic error "-fwhole-program"
#pragma GCC diagnostic error "-fcse-skip-blocks"
#pragma GCC diagnostic error "-funsafe-loop-optimizations"
#pragma GCC optimize("fast-math","unroll-loops","no-stack-protector","inline")
#include <cstdio>
#include <iostream>
#include <algorithm>
#define LL long long
#define re register
using namespace std;
const int N = 5e4 + 5;
const LL P = 536870912;
int n, m, cur, x0, y0, x1, y1, rt, L1[N], L2[N], R1[N], R2[N], siz[N], ls[N], rs[N], ds[N], gs[N];
LL sum[N], tg1[N], tg2[N], v1, v2;
struct node{int x, y; LL v;}s[N];
inline bool cmpx(int a, int b){return s[a].x < s[b].x;}
inline bool cmpy(int a, int b){return s[a].y < s[b].y;}
inline void read(int &x)
{
x = 0; char ch = getchar();
while (!isdigit(ch)) ch = getchar();
while (isdigit(ch)) x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();
}
inline void update(int p, int o)
{
L1[p] = min(L1[p], L1[o]), R1[p] = max(R1[p], R1[o]);
L2[p] = min(L2[p], L2[o]), R2[p] = max(R2[p], R2[o]);
}
inline void maintain(int p)
{
siz[p] = siz[ls[p]] + siz[rs[p]] + 1, sum[p] = sum[ls[p]] + sum[rs[p]] + s[p].v;
L1[p] = R1[p] = s[p].x, L2[p] = R2[p] = s[p].y;
if (ls[p]) update(p, ls[p]); if (rs[p]) update(p, rs[p]);
}
int build(int l, int r)
{
if (l > r) return 0;
int mid = (l + r) >> 1;
double av1 = 0, av2 = 0, s1 = 0, s2 = 0;
for(re int i = l; i <= r; i++) av1 += s[gs[i]].x, av2 += s[gs[i]].y;
av1 /= (r - l + 1), av2 /= (r - l + 1);
for(re int i = l; i <= r; i++)
s1 += (av1 - s[gs[i]].x) * (av1 - s[gs[i]].x), s2 += (av2 - s[gs[i]].y) * (av2 - s[gs[i]].y);
if (s1 > s2) nth_element(gs + l, gs + mid, gs + r + 1, cmpx), ds[gs[mid]] = 1;
else nth_element(gs + l, gs + mid, gs + r + 1, cmpy), ds[gs[mid]] = 2;
ls[gs[mid]] = build(l, mid - 1), rs[gs[mid]] = build(mid + 1, r), maintain(gs[mid]);
return gs[mid];
}
inline void add1(int p, LL v)
{
s[p].v = s[p].v * v % P, sum[p] = sum[p] * v % P, tg1[p] = tg1[p] * v % P, tg2[p] = tg2[p] * v % P;
}
inline void add2(int p, LL v)
{
s[p].v = (s[p].v + v) % P, sum[p] = (sum[p] + v * siz[p] % P) % P, tg2[p] = (tg2[p] + v) % P;
}
inline void pushdown(int p)
{
add1(ls[p], tg1[p]), add1(rs[p], tg1[p]), tg1[p] = 1;
if (tg2[p]) add2(ls[p], tg2[p]), add2(rs[p], tg2[p]), tg2[p] = 0;
}
void modify(int p)
{
if (!p || L1[p] > x1 || R1[p] < x0 || L2[p] > y1 || R2[p] < y0) return;
if (x0 <= L1[p] && R1[p] <= x1 && y0 <= L2[p] && R2[p] <= y1) return add1(p, v1), add2(p, v2);
if (s[p].x >= x0 && s[p].x <= x1 && s[p].y >= y0 && s[p].y <= y1)
sum[p] = (sum[p] - s[p].v + P) % P, s[p].v = (s[p].v * v1 % P + v2) % P, sum[p] = (sum[p] + s[p].v) % P;
pushdown(p), modify(ls[p]), modify(rs[p]), maintain(p);
}
LL query(int p)
{
if (!p || L1[p] > x1 || R1[p] < x0 || L2[p] > y1 || R2[p] < y0) return 0;
if (x0 <= L1[p] && R1[p] <= x1 && y0 <= L2[p] && R2[p] <= y1) return sum[p];
pushdown(p);
LL res = 0;
if (s[p].x >= x0 && s[p].x <= x1 && s[p].y >= y0 && s[p].y <= y1) res = s[p].v;
return (res + query(ls[p]) + query(rs[p])) % P;
}
int main()
{
freopen("sequence.in", "r", stdin), freopen("sequence.out", "w", stdout);
read(n), read(m);
for(re int i = 1; i <= n; i++) ++cur, read(s[cur].y), s[cur].x = i, gs[++gs[0]] = i, tg1[i] = 1;
rt = build(1, n);
for(int opt; m; m--)
{
read(opt);
if (opt == 0) read(x0), read(x1), read(y0), read(y1), v1 = y0, v2 = y1, y0 = 1, y1 = n, modify(rt);
else if (opt == 1) read(y0), read(y1), read(x0), read(x1), v1 = x0, v2 = x1, x0 = 1, x1 = n, modify(rt);
else if (opt == 2) read(x0), read(x1), y0 = 1, y1 = n, printf("%lld\n", query(rt));
else if (opt == 3) read(y0), read(y1), x0 = 1, x1 = n, printf("%lld\n", query(rt));
}
}
JZOJ 3469. 【NOIP2013模拟联考7】数列(sequence)的更多相关文章
- JZOJ【NOIP2013模拟联考14】隐藏指令
JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...
- JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)
3462. [NOIP2013模拟联考5]休息(rest) (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Detailed ...
- JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)
3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Det ...
- JZOJ 3493. 【NOIP2013模拟联考13】三角形
3493. [NOIP2013模拟联考13]三角形(triangle) (File IO): input:triangle.in output:triangle.out Time Limits: 10 ...
- JZOJ 3487. 【NOIP2013模拟联考11】剑与魔法(dragons)
3487. [NOIP2013模拟联考11]剑与魔法(dragons) (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB De ...
- JZOJ 3470. 【NOIP2013模拟联考8】最短路(path)
470. [NOIP2013模拟联考8]最短路(path) (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Detailed ...
- JZOJ 3463. 【NOIP2013模拟联考5】军训
3463. [NOIP2013模拟联考5]军训(training) (Standard IO) Time Limits: 2000 ms Memory Limits: 262144 KB Deta ...
- 【NOIP2013模拟联考7】OSU
[NOIP2013模拟联考7]OSU 描述 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分, ...
- [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)
Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...
- [jzoj]3456.【NOIP2013模拟联考3】恭介的法则(rule)
Link https://jzoj.net/senior/#main/show/3456 Description 终于,在众亲们的奋斗下,最终boss 恭介被关进了库特设计的密室.正当她们松了一口气时 ...
随机推荐
- QMetaObject::connectSlotsByName: No matching signal for xxx
问题描述 这个问题是没有与 xxx 这个槽函数匹配的信号,但是我做了 QMetaObject::connectSlotsByName(this);, 自动连接.并且确保了函数名和信号名是没有错误的,还 ...
- 关于python3调用matplotlib中文乱码问题
问题描述 我用来绘制柱形图,横坐标上面的数据, 但是网上大部分说的都是更改横纵坐标标签的乱码问题,而不是横坐标数据乱码问题 解决办法 更改横纵坐标上标签的中文不乱码 import matplotlib ...
- Django基础笔记3(form组件)
From组件 from django.forms import Form, fields class loginForm(Form): # 设置规则 username = fields.CharFie ...
- JavaEE Day12 Xml
今日内容Xml 1.概念 2.语法结构 3.解析xml 一.XML概述 1.概念 Markup Language Extensible Markup Language--可扩展标记语言 标记语言:标签 ...
- UIAutomator测试框架介绍
uiautomator简介 UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务.功能很强,可以对第三方App进行测试,获取屏幕上任意一个 ...
- python @property的介绍与使用
python @property的介绍与使用 python的@property是python的一种装饰器,是用来修饰方法的. 作用: 我们可以使用@property装饰器来创建只读属性,@proper ...
- 玩转 Go 生态|Hertz WebSocket 扩展简析
WebSocket 是一种可以在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层.WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在 W ...
- ModuleNotFoundError: No module named 'MySQLdb'
执行命令 python manage.py makemigrations时抛出以下错误 Traceback (most recent call last): File "D:\Program ...
- 跟光磊学Java-Windows版Java8开发环境搭建
Java语言核心技术 如果想要开发Java程序/Java项目之前,必须要安装和配置JDK,这里的JDK表示Java8\JDK8,不过下载软件的时候,强烈推荐大家一定要去软件的官网下载,因为官网提供的软 ...
- [C++标准模板库:自修教程与参考手册]关于vector
什么是vector 可以这样认为,vector就是一个动态的数组,其中的元素必须具备assignable(可赋值)和copyable(可拷贝)两个性质. vector的一些重要的性质 vector支持 ...