题目链接:我永远喜欢珂朵莉~

在太阳西斜的这个世界里,置身天上之森。等这场战争结束之后,不归之人与望眼欲穿的众人, 人人本着正义之名,长存不灭的过去、逐渐消逝的未来。我回来了,纵使日薄西山,即便看不到未来,此时此刻的光辉,盼君勿忘。

珂朵莉最珂爱了,珂朵莉的题最毒瘤了qwq
不过这道题被我暴力水过去了qwq(以此纪念昨天才补完的末日时小说)
总之先放图qvq




洛咕题解里面好像也有用暴力水过的……不过他们好像用了一些奇怪的操作……比如

vector<vector<int>::iterator> xxx;

并没有看懂……不过从思路来看感觉和我写的差不多……

首先打个表,发现500000500000500000以内数的因数个数最多是200200200个qwq
所以这暗示着珂以暴力水过QWQ
一开始我思路是用一个链表模拟题目的数组,如果有数≤1\le1≤1了就删掉。
但是这样询问仍然是O(n)……O(n)……O(n)……而且发现000的情况很难处理……比较难受……
考虑对于每个iii,用vectorvectorvector记录所有数组中为iii的倍数的下标(从小到大)
假设所有为vvv的倍数的下标都存在mul[v]mul[v]mul[v]里面。
因为是有序的,所以珂以找出一段连续的区间,满足下标都在[l,r][l,r][l,r]区间内。
然后暴力修改即可qwq,如果某个数操作后不是vvv的倍数了,那么把这个数删除。
考虑怎样修改:
因为修改是暴力,所以每次都是单点修改,最后区间查询,所以想到树状数组。
所以修改的时候在树状数组上维护一下即可。

两个细节:

1.1.1.如果从左到右遍历,删除了一个数之后这个数右边的所有元素会向左移……下标也会变……
洛咕上的题解说是把要删掉的元素记下来……最后再删……
其实从右到左遍历就珂以了qwq!{\color{red}\text{其实从右到左遍历就珂以了qwq!}}其实从右到左遍历就珂以了qwq!
因为右到左遍历,即使删除了一个元素,对左边的下标不会有影响qwq

2.2.2.假设一个修改操作是(l,r,v)(l,r,v)(l,r,v),那么程序只会对mul[v]mul[v]mul[v]进行修改。
假设有一个数能被2v2v2v整除,但它除以vvv后就珂能不能被2v2v2v整除,但这里并没有在mul[2v]mul[2v]mul[2v]中删除这个数qwq
所以暴力修改的时候要判断一下,如果当前数不能被vvv整除,那么continuecontinuecontinue,不做操作。
注意不要把这个数删除……不然会因为常数过大而TLE....TLE....TLE....(珂能是eraseeraseerase常数大?)

毒瘤代码

#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<vector>
#include<math.h>
#define re register int
using namespace std;
typedef long long ll;
int read() {re x=0,f=1;char ch=getchar();while(ch<'0' || ch>'9') {if(ch=='-')  f=-1;ch=getchar();}while(ch>='0' && ch<='9') {x=10*x+ch-'0';ch=getchar();}return x*f;
}
const int Size=500005;
int n,m,a[Size];
vector<int> mul[Size];
void divi(int x,int id) {int sx=sqrt(x);for(re i=1; i<=sx; i++) {if(!(x%i)) {mul[i].push_back(id);if(i*i!=x)   mul[x/i].push_back(id);}}
}
ll tree[Size];
inline int lowbit(int x) {return x&(-x);
}
inline void update(int x,int v) {for(re i=x; i<=n; i+=lowbit(i)) {tree[i]+=v;}
}
inline ll query(int x) {ll ans=0;for(re i=x; i; i-=lowbit(i)) {ans+=tree[i];}return ans;
}
void Update(int l,int r,int x) {if(x==1 || mul[x].empty())    return;int le=lower_bound(mul[x].begin(),mul[x].end(),l)-mul[x].begin();int ri=upper_bound(mul[x].begin(),mul[x].end(),r)-mul[x].begin()-1;for(re i=ri; i>=le; i--) {int now=mul[x][i];if(a[now]%x) {//注意:这时不要erase,否则会TLE.. //mul[x].erase(mul[x].begin()+i);continue;}update(now,a[now]/x-a[now]);a[now]/=x;if(a[now]%x)  mul[x].erase(mul[x].begin()+i);}
}
int main() {n=read();m=read();for(re i=1; i<=n; i++) {a[i]=read();//分解质因数,并统计muldivi(a[i],i);//计入树状数组update(i,a[i]);}while(m--) {int op=read();int l=read();int r=read();if(op==1) {int x=read();Update(l,r,x);} else {printf("%lld\n",query(r)-query(l-1));}}return 0;
}

洛谷P3987 我永远喜欢珂朵莉~ 树状数组+vector(暴力)相关推荐

  1. 洛谷P3987 我永远喜欢珂朵莉~(set 树状数组)

    题意 题目链接 Sol 不会卡常,自愧不如.下面的代码只有66分.我实在懒得手写平衡树了.. 思路比较直观:拿个set维护每个数出现的位置,再写个线段树维护区间和 #include<bits/s ...

  2. 珂朵莉树(永远喜欢珂朵莉/doge)

    目录 前言 可能用到前置知识 背景 构建珂朵莉树 核心函数 珂朵莉树在实际题目使用 对珂朵莉树的一些感想 最后的最后 前言 最近刚刚学内容大概是借鉴的吧,感觉这个数据结构不仅简单,还很强,有着非常柯学 ...

  3. [洛谷]P3353 在你窗外闪耀的星星 (#树状数组)

    题目描述 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀着你玫瑰色的 ...

  4. [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解

    参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵 ...

  5. CF1638E. Colorful Operations 珂朵莉树+差分树状数组

    题意 给定长度为nnn的序列,初始所有元素置000.要求支持以下三个操作: Color(l, r, c):将区间[l,r][l, r][l,r]区间染色为ccc: Add(c, x):将颜色为ccc的 ...

  6. 一种黑科技:珂朵莉树

    首先要明白的是:珂朵莉树(ODT)是一种用来骗分的暴力数据结构. 珂朵莉树的思想是利用集合set,把相同且连续的元素合并为一个个区间,从而进行区间修改:因此,珂朵莉树是区间的集合,这点可以通过定义结构 ...

  7. 浅谈珂朵莉树(ODT)

    前言 珂学家狂喜( 文章目录 前言 一.珂朵莉树来源 二.珂朵莉树 1.珂朵莉树有什么用? 2.原理是什么? a.存储 b.分割结点 c.推平 d.剩余操作 3.复杂度分析 三.珂朵莉树例题 1.P4 ...

  8. 浅谈珂朵莉树(Chtholly Tree)——暴力而玄学的数据结构

    关于它很珂学的名字- 珂朵莉树(Chtholly Tree),又称老司机树(Old Driver Tree),起源于CodeFoeces平台上编号为896C的一道题-- " Willem, ...

  9. 我的算法不可能这么简单—珂朵莉树

    文章目录 进入正题 珂朵莉树的起源 题目简述 题目分析 珂朵莉树的实现 萌新三连 1.明明查询的右端点是12,但是要split(13)呢? 2.为什么要先分裂右端点,然后再分裂左端点呢? 3.获取到区 ...

最新文章

  1. 奇葩问题解决-----解决异常情况下的黑屏
  2. SpringBoot一个依赖搞定Session共享,没有比这更简单的方案了!
  3. python二级考time库吗_学python第十七节:time库的学习
  4. what does fullScreenPageRoutes in SAP UI5 mean
  5. 【转】Dynamics 365 CRM 开发架构简介
  6. 关于mysql的几个问题
  7. 微型计算机的输入 输出设备PPT,(微型计算机系统模型).ppt
  8. 傻傻分不清之 Cookie、Session、Token、JWT这次让你彻底搞懂,还不懂你来找我
  9. 锐浪报表 Grid++Report 免注册DLL C/S报表开发(二)清单文件manifest分析
  10. 7.过渡案例:①进度条 ②小米图标翻转(父盒子一定要加初始值!!!)
  11. ES8316耳机驱动可以差分输入支持录音PEQ调节
  12. android rxbus github,RxBus的实现及简单使用
  13. 上界通配符、下界通配符
  14. Ansible配置执行远程主机的ssh端口号
  15. 腾讯云php小程序,使用微信小程序和腾讯云实现直播功能
  16. 高并发服务端分布式系统设计概要
  17. 永磁直驱风力发电机组并网仿真模型搭建
  18. 智能车牌识别停车场系统方案
  19. Linux系统使用--Ubuntu 16.04 安装为知笔记
  20. 【231】判断是否是2的次幂--位运算相关

热门文章

  1. 拼多多校招-----六一儿童节(python)
  2. windows下强大的系统监视工具Procmon(Process Monitor)
  3. 【路科V0】systemVerilog基础11——随机变量
  4. iMAC——U盘全新重装Mac系统
  5. available: expected at least 1 bean which qualifies as autowire candidate
  6. gif制作——电脑完全免费GIF录制工具下载
  7. oracle11g登录企业管理器,Oracle11g RAC常用操作 (维护及管理)
  8. 树莓派linux led字符设备驱动(信号量)
  9. java安卓app开发教程_[Android教程] Cordova开发App入门(一)创建android项目
  10. 014. 找树左下角的值