\(\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)的更多相关文章

  1. JZOJ【NOIP2013模拟联考14】隐藏指令

    JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...

  2. JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)

    3462. [NOIP2013模拟联考5]休息(rest) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed ...

  3. JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)

    3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Det ...

  4. JZOJ 3493. 【NOIP2013模拟联考13】三角形

    3493. [NOIP2013模拟联考13]三角形(triangle) (File IO): input:triangle.in output:triangle.out Time Limits: 10 ...

  5. JZOJ 3487. 【NOIP2013模拟联考11】剑与魔法(dragons)

    3487. [NOIP2013模拟联考11]剑与魔法(dragons) (Standard IO) Time Limits: 1000 ms  Memory Limits: 131072 KB  De ...

  6. JZOJ 3470. 【NOIP2013模拟联考8】最短路(path)

    470. [NOIP2013模拟联考8]最短路(path) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed ...

  7. JZOJ 3463. 【NOIP2013模拟联考5】军训

    3463. [NOIP2013模拟联考5]军训(training) (Standard IO) Time Limits: 2000 ms  Memory Limits: 262144 KB  Deta ...

  8. 【NOIP2013模拟联考7】OSU

    [NOIP2013模拟联考7]OSU 描述 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分, ...

  9. [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)

    Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...

  10. [jzoj]3456.【NOIP2013模拟联考3】恭介的法则(rule)

    Link https://jzoj.net/senior/#main/show/3456 Description 终于,在众亲们的奋斗下,最终boss 恭介被关进了库特设计的密室.正当她们松了一口气时 ...

随机推荐

  1. 快速创建Jenkins Job

    Jenkins Job 类型 **1.Freestyle project ** 这个是jenkins的基础功能,可以用它来执行各种构建任务,他只能构建在一个电脑上,如果没有太多的需求,这个job基本够 ...

  2. fiddler提示"The system proxy was changed,click to reenable fiddler capture"的解决方法

    之前用fiddler 一直都是正常的,但是过了几个月再次使用的时候没几秒钟就提示:The system proxy was changed,click to reenable fiddler capt ...

  3. UE4 WebUI插件使用指南

    在开发数字孪生应用程序的时候,除了三维场景展示之外,也需要开发丰富和酷炫的2D页面. 使用UE4的UMG开发图表显得比较笨拙. 而通过Web插件允许开发者创建丰富的基于Web HTML5的用户界面,它 ...

  4. flutter系列之:flutter中的变形金刚Transform

    目录 简介 Transform简介 Transform的使用 总结 简介 虽然我们在开发APP的过程中是以功能为主,但是有时候为了美观或者其他的特殊的需求,需要对组件进行一些变换.在Flutter中这 ...

  5. Python全栈工程师之从网页搭建入门到Flask全栈项目实战(4) - Flask模板语法与继承

    1.Flask模板介绍 前置:理解渲染机制即上篇笔记中render_template()功能是如何实现的! 1)找到html文件地址 2)读取html文件中的内容 3)替换html中的特殊字符 4)将 ...

  6. socet网络编程

    一. 网络模型 应用层   -----     HTTP协议 传输层   -----     TCP协议 网络层   -----       IP协议 链路层   -----     以太网协议 二. ...

  7. ChatGPT杀疯了,这人工智能也太离谱了吧

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/2ac8440d.html 你好,我是测试蔡坨坨. 这几天被ChatGPT刷屏,各大网站平台都能看到关于它的文章和视频,上线短 ...

  8. 搭建漏洞环境及实战——搭建XSS测试平台

    XSS测试平台是测试XSS漏洞获取cookie并接收Web页面的平台,XSS可以做成JS能做的所有事,包括但不限于窃取cookie.后台增删文章.钓鱼.利用CSS漏洞进行传播.修改网页代码.网站重定向 ...

  9. vue 组件之间传值(父传子,子传父)

    1.父传子 基本就用一个方式,props Father.vue(用v-bind(简写 : )  将父组件传的值绑定到子组件上) <template> <div> 我是爸爸:{{ ...

  10. Windows缓冲区溢出实验

    Windows缓冲区溢出 前言 windows缓冲区溢出学习笔记,大佬勿喷 缓冲区溢出 当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被"撑暴",从而覆盖 ...