题目


分析

设最大值为 \(mx\),考虑每个数最多被除以 \(\log{mx}\) 次,那么加上树状数组的维护为 \(O(n\log{n}\log{mx})\)

问题就是如何快速找到这些位置,可以对于每一个约数单独把合法的数抽出来作为连续的一段用并查集维护。

那么一共需要抽出 \(O(mx\log{mx})\) 个位置,再加上并查集的维护也就是加上一个 \(\log\)。

总时间复杂度为 \(O(mx\log{mx}\log{n}+n\sqrt{mx}+n\log{n}\log{mx})\)。


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int N=500011; typedef long long lll; lll C[N],lans;
int l[N],r[N],c[N],b[N*40],f[N*40],n,m,mx,a[N];
inline lll iut(){
rr lll ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(lll ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline void update(int x,int y){
for (;x<=n;x+=-x&x) C[x]+=y;
}
inline lll query(int l,int r){
rr lll ans=0; --l;
for (;r>l;r-=-r&r) ans+=C[r];
for (;l>r;l-=-l&l) ans-=C[l];
return ans;
}
inline signed getf(int u){return f[u]==u?u:f[u]=getf(f[u]);}
signed main(){
n=iut(); m=iut(),mx=1;
for (rr int i=1;i<=n;++i) a[i]=iut(),C[i]=C[i-1]+a[i];
for (rr int i=1;i<=n;++i)
if (a[i]>1) mx=mx>a[i]?mx:a[i],++c[a[i]];
for (rr int i=n;i;--i) C[i]-=C[i&(i-1)];
for (rr int i=2;i<=mx;++i)
for (rr int j=i+i;j<=mx;j+=i)
c[i]+=c[j];
for (rr int i=2,lst=0;i<=mx;++i) if (c[i]){
l[i]=lst+1,r[i]=l[i]+c[i]-1,lst=r[i],c[i]=0;
for (rr int j=l[i];j<=r[i];++j) f[j]=j;
}
for (rr int i=1;i<=n;++i)
if (a[i]>1){
b[l[a[i]]+c[a[i]]]=i,++c[a[i]];
for (rr int j=2;j*j<=a[i];++j)
if (a[i]%j==0){
b[l[j]+c[j]]=i,++c[j];
if (j*j<a[i]) b[l[a[i]/j]+c[a[i]/j]]=i,++c[a[i]/j];
}
}
for (rr int i=1;i<=m;++i){
rr int opt=iut();
rr int L=iut()^lans,R=iut()^lans;
if (opt==2) print(lans=query(L,R)),putchar(10);
else{
rr int x=iut()^lans;
if (x<2||x>mx||!c[x]) continue;
L=lower_bound(b+l[x],b+1+r[x],L)-b;
R=upper_bound(b+l[x],b+1+r[x],R)-b-1;
if (L>r[x]||L>R) continue;
for (rr int now=getf(L);now<=R;now=getf(now+1)){
if (a[b[now]]%x==0) update(b[now],a[b[now]]/x-a[b[now]]),a[b[now]]/=x;
if (now==R) break;
if (a[b[now]]%x) f[now]=getf(now+1);
}
}
}
return 0;
}

#并查集,树状数组#洛谷 5610 [Ynoi2013] 大学的更多相关文章

  1. BZOJ-3211花神游历各国 并查集+树状数组

    一开始想写线段树区间开方,简单暴力下,但觉得变成复杂度稍高,懒惰了,编了个复杂度简单的 3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Subm ...

  2. BZOJ3211 花神游历各国 并查集 树状数组

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3211 题意概括 有n个数形成一个序列. m次操作. 有两种,分别是: 1. 区间开根(取整) 2. ...

  3. hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点)

    hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 ...

  4. 【bzoj4869】[Shoi2017]相逢是问候 扩展欧拉定理+并查集+树状数组

    题目描述 Informatik verbindet dich und mich. 信息将你我连结. B君希望以维护一个长度为n的数组,这个数组的下标为从1到n的正整数.一共有m个操作,可以分为两种:0 ...

  5. HDU 5458 Stability(双连通分量+LCA+并查集+树状数组)(2015 ACM/ICPC Asia Regional Shenyang Online)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5458 Problem Description Given an undirected connecte ...

  6. la4730(并查集+树状数组)

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=30& ...

  7. 【BZOJ3211】花神游历各国 并查集+树状数组

    [BZOJ3211]花神游历各国 Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 41 100 5 551 1 22 1 ...

  8. HDU 4750 Count The Pairs ★(图+并查集+树状数组)

    题意 给定一个无向图(N<=10000, E<=500000),定义f[s,t]表示从s到t经过的每条路径中最长的边的最小值.Q个询问,每个询问一个t,问有多少对(s, t)使得f[s, ...

  9. 【BZOJ4382】[POI2015]Podział naszyjnika 堆+并查集+树状数组

    [BZOJ4382][POI2015]Podział naszyjnika Description 长度为n的一串项链,每颗珠子是k种颜色之一. 第i颗与第i-1,i+1颗珠子相邻,第n颗与第1颗也相 ...

  10. Hdu 5458 Stability (LCA + 并查集 + 树状数组 + 缩点)

    题目链接: Hdu 5458 Stability 题目描述: 给出一个还有环和重边的图G,对图G有两种操作: 1 u v, 删除u与v之间的一天边 (保证这个边一定存在) 2 u v, 查询u到v的路 ...

随机推荐

  1. GDI快速遍历位图像素

    使用DIB部分可直接快速访问像素 例如,此测试将记事本中的所有白色像素替换为绿色像素 HDC hDCScreen = GetDC(NULL); HWND hWndDest = FindWindow(L ...

  2. ADVMP 三代壳(vmp加固)原理分析(加壳流程)

    开源项目地址 https://github.com/chago/ADVMP vmp 加固可以说时各大加固厂商的拳头产品了,这个开源项目虽然不是十分完善,让我们可以一览vmp加固的原理,是十分好的学习资 ...

  3. React 组件通信方式

    人生的游戏不在于拿了一副好牌,而在于怎样去打好坏牌,世上没有常胜将军,勇于超越自我者才能得到最后的奖杯. 1. 父子组件通信方式 1.1 父组件传递到子组件 直接通过属性进行传递,数据的传递可以提高组 ...

  4. 【系统选型】OA需求分析,OA系统选型及各供应商对比。

    去年公司内部做OA信息化升级,需要更新换代一下OA系统,当时OA选型整理下来的资料分享一下. 需求调研整理后如下: 一共四个模块需要更新&升级 :  OA模块(包括行政) + 合同模块 + 费 ...

  5. 【Azure APIM】APIM 策略语句如何读取请求头中所携带的Cookie信息并保存为变量

    问题描述 需要在APIM策略中对请求所携带的Cookie中的token值进行JWT验证,如果获取Cookie中的值并且作为变量保存,然后在JWT 验证中使用呢? 问题解答 第一步:获取Cookie中的 ...

  6. Java instanceof 全小写 关键字使用

    1 package com.bytezreo.duotai2; 2 3 import java.sql.Date; 4 5 /** 6 * 7 * @Description 面向对象的特征三 ---- ...

  7. js收藏网页功能,纠正网上乱转没求证的案例

    网站一般流行以下收藏代码 function AddFavorite(title, url){ try{ //ie收藏 window.external.addFavorite(url, title); ...

  8. vue配置scss全局样式

    安装插件 npm install sass --save-dev 在src文件夹下创建styles文件夹,并创建以下文件 index.scss: scss的入口文件 // 引入清除默认样式 @impo ...

  9. Mac下使用Docker快速布署FastGPT实现AI私有知识库

    FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理.模型调用等能力.同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景! 官网地址为:https: ...

  10. navigator.aardio 代码备份

    import win.ui; import console; import process; import string.regex; import libs.router; /*DSG{{*/ ma ...