题意

给定长为 \(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 由乃与大母神原型和偶像崇拜的更多相关文章

  1. 洛谷P3792 由乃与大母神原型和偶像崇拜

    P3792 由乃与大母神原型和偶像崇拜 题目背景 由乃最近没事干,去研究轻拍学去了 就是一个叫做flip flappers,轻拍翻转小膜女的番 然后研究的过程中她看到了一个叫做大母神原型的东西 大母神 ...

  2. p3792 由乃与大母神原型和偶像崇拜(思维+线段树)

    要求 1.修改x位置的值为y 2.查询区间l,r是否可以重排为值域上连续的一段 可以,很lxl 然后一开始思考合并区间,但是发现可以重排序,GG 然后想了特殊性质,比如求和,但是显然可以被叉 这时候我 ...

  3. AC日记——由乃与大母神原型和偶像崇拜 洛谷 P3792

    由乃与大母神原型和偶像崇拜 思路: 逆元+线段树维护和+线段树维护平方和+线段树维护最大最小值: 代码: #include <bits/stdc++.h> using namespace ...

  4. 【洛谷P3792】由乃与大母神原型和偶像崇拜

    题目大意:维护一个序列,支持单点修改和查询一段区间能不能组成连续的一段数. 题解:查询区间能不能组成一段连续的数这个操作较为复杂,很难在较小时间复杂度内直接维护.这里采用线段树维护区间哈希的策略,即: ...

  5. LuoguP3792 由乃与大母神原型和偶像崇拜

    题目地址 题目链接 题解 由乃题还是毒瘤啊orz 显然的一个结论是,如果保证不重复,维护区间min,max然后判断max-min+1==r-l+1是否成立即可 但是有重复 于是就要orz题解区的各位大 ...

  6. 「Luogu 3792」由乃与大母神原型和偶像崇拜

    更好的阅读体验 Portal Portal1: Luogu Description 给你一个序列\(a\) 每次两个操作: 修改\(x\)位置的值为\(y\): 查询区间\([l, r]\)是否可以重 ...

  7. 強大的javascrpt原型链學習

    一个自带隐式的 __proto__ 属性[implicit __proto__ property],指向foo的原型 這有點類似實現C# 繼承作用 a類的公共東西,給b和c類共用 var a = { ...

  8. Cocos引擎现身 IndiePrize 全球游戏开发者大会!Cocos的两大男神成为压轴嘉宾

    2019全球游戏开发者大会今天11月10日,在深圳南山海上世界文化艺术中心拉开帷幕.除了号称精品游戏"奥斯卡"的IndiePrize将在现场展开最终角逐,更有来自美国.俄罗斯.澳大 ...

  9. 《Xenogears》(异度装甲)隐含的原型与密码

    <Xenogears>(异度装甲)隐含的原型与密码 X 彩虹按:一种高次元的“生命体”,因“事故”被抓来当成“超能源”,其实那不只是“无限的能源”而已,“它”是有意志的!在我们眼里看来,这 ...

  10. 十大Intellij IDEA快捷键

    转载:http://blog.csdn.net/dc_726/article/details/42784275 Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一 ...

随机推荐

  1. null 和 undefined 的区别?

    null 表示一个对象被定义了,值为"空值":undefined 表示不存在这个值.(1)变量被声明了,但没有赋值时,就等于undefined. (2) 调用函数时,应该提供的参数 ...

  2. SpringBoot全局异常,返回JSON数据

    全局异常处理 为什么要配全局异常? 不配全局服务端报错场景,1/0.空指针等 配置好处 统一的错误页面或错误码 对用户更友好 配置全局异常 第一步类添加注解 @ControllerAdvicce,如果 ...

  3. Nuxt.js 错误侦探:useError 组合函数

    title: Nuxt.js 错误侦探:useError 组合函数 date: 2024/7/14 updated: 2024/7/14 author: cmdragon excerpt: 摘要:文章 ...

  4. 【SQL】晨光咖啡馆,过滤聚合的微妙碰撞

    这天,小悦懒洋洋地步入办公楼下的咖啡馆,意外地与一位男子不期而遇.他显然因前一晚的辛勤工作而略显疲惫,却仍选择早到此地,寻找一丝宁静与放松.他叫逸尘,身姿挺拔,衣着简约而不失格调,晨光下更显英俊不凡, ...

  5. [oeasy]python0124_Code_page_437_IBM_5150_点阵式字形码_显示器效果

    字符显示器 回忆上次内容 简体和繁体的汉字 字符数量都超级大 感谢王选和陈堃銶等前辈发明了激光照排技术 中文排版从此使用上了gb2312编码   ​   添加图片注释,不超过 140 字(可选)   ...

  6. [oeasy]python0026_刷新时间_延迟时间_time_sleep_死循环_while_True

    ​ 刷新时间 回忆上次内容 time 是一个 ​​module​ import 他可以做和时间相关的事情 time.time() 得到当前时间戳 time.localtime() 得到本地时间元组 l ...

  7. oeasy教您玩转python - 001 - # 换行插入

    ​ 先跑起来 Python 什么是 Python? Python 很好用 适合初学者 而且在各个领域都很强大 ​ 后来居上 ​ 上图可以点开 python3 早已有之 最终逆风翻盘 当然 java 也 ...

  8. Java 基于Hutool实现DES加解密

    POM.XML配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  9. Odoo 基于Win10搭建基于Win10搭建odoo14开发环境搭建

    实践环境 win10 Python 3.6.2 odoo_14.0.latest.tar.gz 下载地址: https://download.odoocdn.com/download/14/src?p ...

  10. 安装jieba中文分词库

    插入一条: 有个更快安装下载jieba的方法,用镜像下载,非常快,2秒就行 pip install jieba -i https://pypi.douban.com/simple/ 1.打开官方网站: ...