P3792 由乃与大母神原型和偶像崇拜
题意
给定长为 \(n\) 的数组 \(a\),支持单点修改,\(q\) 次查询区间 \([l,r]\) 是否可以重排为值域上连续的一段。
\(n,q\le5\times10^5,a_i\le2.5\times10^7\) \(\quad\) \(\text{1 s, 512 MB}\)
题解
倘若可以被重排成值域上连续的一段,那么处于哪一段上也就是也可以确定的,令区间最大最小值分别为 \(Max\) 和 \(Min\),那么在值域上连续一定是 \([Min,Max]\),问题转换为判断区间是否能和 \([Min,Max]\) 重合。
从数颜色的角度是困难的,不妨换一个思路,类似哈希的思想,先预处理值域上的前缀平方和,再用线段树维护区间平方和,最后判断值是否相同即可,可以选择取模或者 unsigned long long
自然溢出。
还有一种方法是维护前继相同的值,询问时先判断 \([Min,Max]\) 的长度是否和区间长度相同,后判断区间内元素最大前继是否落在区间内即可。
时间复杂度均为 \(\mathcal{O}(n\log n)\)。
哈希 + 自然溢出实现:
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5,NN = 2.5e7 + 5;
int n,q,a[N],Vmax = INT_MIN;
#define ull unsigned int long long
struct XDT{
int l,r,mi,ma; ull sum;
}t[N << 2];
#define ls p << 1
#define rs p << 1 | 1
void pushup(int p){
t[p].mi = min(t[ls].mi,t[rs].mi);
t[p].ma = max(t[ls].ma,t[rs].ma);
t[p].sum = t[ls].sum + t[rs].sum;
}
void build(int p,int l,int r){
t[p].l = l, t[p].r = r;
if (l == r){
t[p].mi = t[p].ma = a[l];
t[p].sum = (ull)a[l] * a[l];
return ;
}
int mid = (l + r) >> 1;
build(ls,l,mid), build(rs,mid + 1,r);
pushup(p);
}
void modify(int p,int x,int y){
if (t[p].l == t[p].r){
t[p].mi = t[p].ma = y;
t[p].sum = y * y;
return ;
}
int mid = (t[p].l + t[p].r) >> 1;
if (x <= mid) modify(ls,x,y);
else modify(rs,x,y);
pushup(p);
}
ull querySUM(int p,int l,int r){
if (l <= t[p].l && t[p].r <= r){
return t[p].sum;
}
int mid = (t[p].l + t[p].r) >> 1; ull val = 0;
if (l <= mid) val += querySUM(ls,l,r);
if (r > mid) val += querySUM(rs,l,r);
return val;
}
int queryMAX(int p,int l,int r){
if (l <= t[p].l && t[p].r <= r){
return t[p].ma;
}
int mid = (t[p].l + t[p].r) >> 1, val = INT_MIN;
if (l <= mid) val = max(val,queryMAX(ls,l,r));
if (r > mid) val = max(val,queryMAX(rs,l,r));
return val;
}
int queryMIN(int p,int l,int r){
if (l <= t[p].l && t[p].r <= r){
return t[p].mi;
}
int mid = (t[p].l + t[p].r) >> 1, val = INT_MAX;
if (l <= mid) val = min(val,queryMIN(ls,l,r));
if (r > mid) val = min(val,queryMIN(rs,l,r));
return val;
}
ull s[NN];
int read(){
int x = 0; char ch = getchar();
while (ch < '0' || ch > '9'){
ch = getchar();
}
while ('0' <= ch && ch <= '9'){
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x;
}
int main(){
n = read(), q = read();
for (int i = 1;i <= n;i++) a[i] = read(), Vmax = max(Vmax,a[i]);
for (int i = 1;i <= Vmax;i++) s[i] = s[i - 1] + (ull)i * i;
build(1,1,n);
while (q--){
int o = read(),l = read(),r = read();
if (o == 1)
modify(1,l,r);
else{
if (querySUM(1,l,r) == s[queryMAX(1,l,r)] - s[queryMIN(1,l,r) - 1])
puts("damushen");
else
puts("yuanxing");
}
}
return 0;
}
P3792 由乃与大母神原型和偶像崇拜的更多相关文章
- 洛谷P3792 由乃与大母神原型和偶像崇拜
P3792 由乃与大母神原型和偶像崇拜 题目背景 由乃最近没事干,去研究轻拍学去了 就是一个叫做flip flappers,轻拍翻转小膜女的番 然后研究的过程中她看到了一个叫做大母神原型的东西 大母神 ...
- p3792 由乃与大母神原型和偶像崇拜(思维+线段树)
要求 1.修改x位置的值为y 2.查询区间l,r是否可以重排为值域上连续的一段 可以,很lxl 然后一开始思考合并区间,但是发现可以重排序,GG 然后想了特殊性质,比如求和,但是显然可以被叉 这时候我 ...
- AC日记——由乃与大母神原型和偶像崇拜 洛谷 P3792
由乃与大母神原型和偶像崇拜 思路: 逆元+线段树维护和+线段树维护平方和+线段树维护最大最小值: 代码: #include <bits/stdc++.h> using namespace ...
- 【洛谷P3792】由乃与大母神原型和偶像崇拜
题目大意:维护一个序列,支持单点修改和查询一段区间能不能组成连续的一段数. 题解:查询区间能不能组成一段连续的数这个操作较为复杂,很难在较小时间复杂度内直接维护.这里采用线段树维护区间哈希的策略,即: ...
- LuoguP3792 由乃与大母神原型和偶像崇拜
题目地址 题目链接 题解 由乃题还是毒瘤啊orz 显然的一个结论是,如果保证不重复,维护区间min,max然后判断max-min+1==r-l+1是否成立即可 但是有重复 于是就要orz题解区的各位大 ...
- 「Luogu 3792」由乃与大母神原型和偶像崇拜
更好的阅读体验 Portal Portal1: Luogu Description 给你一个序列\(a\) 每次两个操作: 修改\(x\)位置的值为\(y\): 查询区间\([l, r]\)是否可以重 ...
- 強大的javascrpt原型链學習
一个自带隐式的 __proto__ 属性[implicit __proto__ property],指向foo的原型 這有點類似實現C# 繼承作用 a類的公共東西,給b和c類共用 var a = { ...
- Cocos引擎现身 IndiePrize 全球游戏开发者大会!Cocos的两大男神成为压轴嘉宾
2019全球游戏开发者大会今天11月10日,在深圳南山海上世界文化艺术中心拉开帷幕.除了号称精品游戏"奥斯卡"的IndiePrize将在现场展开最终角逐,更有来自美国.俄罗斯.澳大 ...
- 《Xenogears》(异度装甲)隐含的原型与密码
<Xenogears>(异度装甲)隐含的原型与密码 X 彩虹按:一种高次元的“生命体”,因“事故”被抓来当成“超能源”,其实那不只是“无限的能源”而已,“它”是有意志的!在我们眼里看来,这 ...
- 十大Intellij IDEA快捷键
转载:http://blog.csdn.net/dc_726/article/details/42784275 Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一 ...
随机推荐
- WOE编码与IV值
参考: WOE与IV值浅谈 机器学习-变量筛选之IV值和WOE 0. Introduction WOE (weight of evidence): 证据权重 IV (information value ...
- Excel VBA编程常用语句300句
定制模块行为 1. Option Explicit '强制对模块内所有变量进行声明 Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 Opt ...
- java面试一日一题:java内存区域
问题:请讲下java内存区域? 分析:该问题比较容易和jvm内存模型相混淆,内存模型说的是java的内存规范,规定的是多线程下访问主内存的规则:而内存区域,说的是java运行时的内存划分,换句话说就是 ...
- 【SQL】 牛客网SQL训练Part2 中等难度
查找当前薪水详情以及部门编号dept_no 查找 1.各个部门当前领导的薪水详情以及其对应部门编号dept_no, 2.输出结果以salaries.emp_no升序排序, 3.并且请注意输出结果里面d ...
- 【JavaScript】下拉联动回显问题
首先是多级下拉联动实现: 这是DOM结构: <div> <label style="margin-left: 10px;display: inline-block;&quo ...
- 特朗普开始在YouTube上打竞选广告了 —— 美国总统的竞选广告已经开始媒体投放了
相关: 拜登开始在YouTube上打竞选广告了 -- 美国总统的竞选广告已经开始媒体投放了 PS. 又多了一个猴上台,哈哈哈. 特朗普的竞选资金筹集网站:
- 两个 RTX2070 super 显卡 可不可以通过 nvlink交换机 进行P2P通信 呢? (答案: 可以)
以前转载了一篇文章: https://www.cnblogs.com/devilmaycry812839668/p/12370685.html 对于里面的结果总感觉有所怀疑,于是斥巨资购入两个 ...
- Jax计算框架的MPI通讯的扩展库 —— mpi4jax
地址: https://github.com/mpi4jax/mpi4jax PS. 关于这个library的性能表现并不是很清楚,没有亲自手动安装并测试过.这里只作为链接收藏之用,毕竟这个属于比较小 ...
- 【转载】sun的rpc ——rpcbind(nfs文件系统中的rpc)
原文地址: https://blog.csdn.net/wangpeng138375/article/details/8169071 ================================= ...
- ubuntu20.04/22.04 系统环境下源码编译Python3.10
2022年10月3日更新 在Ubuntu22.04系统上源码编译python,所依赖环境的安装命令为: sudo apt install gcc g++ libffi-dev build-essent ...