洛谷P3987 我永远喜欢珂朵莉~(set 树状数组)
题意
题目链接
Sol
不会卡常,自愧不如。下面的代码只有66分。我实在懒得手写平衡树了。。
思路比较直观:拿个set维护每个数出现的位置,再写个线段树维护区间和
#include<bits/stdc++.h>
#define LL long long
const int MAXN = 5e5 + 10, INF = 1e9 + 7;
using namespace std;
template<typename A, typename B> inline bool chmax(A &x, B y) {if(y > x) {x = y; return 1;}else return 0;
}
template<typename A, typename B> inline bool chmin(A &x, B y) {if(y < x) {x = y; return 1;}else return 0;
}
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, M, op[MAXN], ql[MAXN], qr[MAXN], val[MAXN];
LL a[MAXN];
bool ha[MAXN];
set<int> s[MAXN];
void gao(int pos, int x) {for(int i = 1; i * i <= x; i++) {if(x % i == 0) {if(ha[i]) s[i].insert(pos);if(i != (x / i))if(ha[x / i]) s[x / i].insert(pos);}}
}
#define lb(x) (x & (-x))
LL T[MAXN];
void Add(int p, int v) {while(p <= N) T[p] += v, p += lb(p);
}
LL Sum(int x) {LL ans = 0;while(x) ans += T[x], x -= lb(x);return ans;
}
LL Query(int l, int r) {return Sum(r) - Sum(l - 1);
}
void Modify(int p, int v) {Add(p, -a[p]);Add(p, a[p] / v);
}void Change(int l, int r, int x) {auto it = s[x].lower_bound(l);while(1) {int pos = *it;if(it == s[x].end() || pos > r) return ;if(a[pos] % x != 0) {it++; s[x].erase(prev(it)); continue;}else Modify(pos, x), a[pos] /= x;it++;}
}
int main() {
// freopen("a.in", "r", stdin);N = read(); M = read();for(int i = 1; i <= N; i++) a[i] = read(), Add(i, a[i]);for(int i = 1; i <= M; i++) {op[i] = read(), ql[i] = read(); qr[i] = read();if(op[i] == 1) val[i] = read(), ha[val[i]] = 1;}for(int i = 1; i <= N; i++) gao(i, a[i]);for(int i = 1; i <= M; i++) {if(op[i] == 1) {if(val[i] != 1) Change(ql[i], qr[i], val[i]);} else cout << Query(ql[i], qr[i]) << '\n';}return 0;
}
转载于:https://www.cnblogs.com/zwfymqz/p/10357651.html
洛谷P3987 我永远喜欢珂朵莉~(set 树状数组)相关推荐
- 洛谷P3987 我永远喜欢珂朵莉~ 树状数组+vector(暴力)
题目链接:我永远喜欢珂朵莉- 在太阳西斜的这个世界里,置身天上之森.等这场战争结束之后,不归之人与望眼欲穿的众人, 人人本着正义之名,长存不灭的过去.逐渐消逝的未来.我回来了,纵使日薄西山,即便看不到 ...
- 珂朵莉树(永远喜欢珂朵莉/doge)
目录 前言 可能用到前置知识 背景 构建珂朵莉树 核心函数 珂朵莉树在实际题目使用 对珂朵莉树的一些感想 最后的最后 前言 最近刚刚学内容大概是借鉴的吧,感觉这个数据结构不仅简单,还很强,有着非常柯学 ...
- [BZOJ4889][洛谷P3759][TJOI2017]不勤劳的图书管理员 分块+树状数组
题目描述 加里敦大学有个帝国图书馆,小豆是图书馆阅览室的一个书籍管理员.他的任务是把书排成有序的,所以无序的书让他产生厌烦,两本乱序的书会让小豆产生这两本书页数的和的厌烦度.现在有n本被打乱顺序的书, ...
- 【洛谷5069】纵使日薄西山【set】【树状数组】
传送门 最nb的就是这种算法简单思维困难的题. 题目说,选最大,将左中右三个一起减少. 使用瞪眼法你要发现一个性质: 修改一个数,那左中右的相对大小不变.所以它左右的数不会被修改,永远不会.因为其它数 ...
- 洛谷1527(bzoj2738)矩阵乘法——二维树状数组+整体二分
题目:https://www.luogu.org/problemnew/show/P1527 不难想到(?)可以用二维树状数组.但维护什么?怎么查询是难点. 因为求第k小,可以考虑记权值树状数组,把比 ...
- 洛谷 P3353 在你窗外闪耀的星星(树状数组)
利用数组在 x 处做个映射,为 x 点处的亮度之和,这样利用树状数组在区间查询的时候要注意一下端点的情况 从位置 1 开始,一直到 1e5,寻找最大的区间和,复杂度为 O(1e5logn),不开 o2 ...
- [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解
参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵 ...
- 一种黑科技:珂朵莉树
首先要明白的是:珂朵莉树(ODT)是一种用来骗分的暴力数据结构. 珂朵莉树的思想是利用集合set,把相同且连续的元素合并为一个个区间,从而进行区间修改:因此,珂朵莉树是区间的集合,这点可以通过定义结构 ...
- 浅谈珂朵莉树(ODT)
前言 珂学家狂喜( 文章目录 前言 一.珂朵莉树来源 二.珂朵莉树 1.珂朵莉树有什么用? 2.原理是什么? a.存储 b.分割结点 c.推平 d.剩余操作 3.复杂度分析 三.珂朵莉树例题 1.P4 ...
最新文章
- ChemDataExtractor:从PDF、HTM、文本等中提取化学数据
- java对文本文件进行操作:读取、修改、添加、删除、重命名等
- phpcms mysql 事务_phpcms某站点MySQL报错注入
- superset中的json数据转csv
- No result defined for action action.QueryAction and result result
- 手机 html 折叠效果,HTML5仿苹果手机的面板合拢折叠效果
- WPF设计の自定义窗体
- eatwhatApp开发实战(二)
- hadoop api 复制文件_Hadoop核心架构是怎样的?
- vofuria的开发(3)将vuforia引入新建立的工程
- 计算机常用算法对照表整理
- SPSS入门教程——如何分析两个变量之间的关联度?
- 因为计算机丢失amd,amdxatasys丢失或损坏,windows丢失sys文件
- 电子墨水屏技术原理介绍
- linux命令显示文件内容行号|linux将内容以行号显示出来
- 使用Simu5G实现车联网V2X通信过程(两个简单的示例)
- 【CSP-S2019模拟】09.24比赛总结
- Zeppelin导入额外jar包方法
- 字符串操作函数的实现【详解】
- 电路设计的3W原则、5W原则、3H原则、5H原则、20H原则、五五规则
热门文章
- python爬虫requests模块
- SpringBoot JPA多对一 持久化是报错object references an unsaved transient instance - save the transient instanc
- 【开发问题】Android——Fragment must be a public static class to be properly recreated from instanc
- tensorflow与pytorch 一起安装
- Java删除Maven下的.lastUpdated文件
- 83.【JQuery.Ajax】
- max31865模块 PT100测温 PT1000测温 接线说明要点说明 使用说明 程序 单片机
- 邮箱授权码正确,却连接失败
- 使用友盟进行app的增量更新
- 深入了解 Flex 属性