[Ynoi2016]炸脖龙I/Nephren Ruq Insania

[YNOI2019] 排队c++ 第三行包含nn个浮点数,它们之间用一个空格隔开,与第二行中的数据一一对应,代表已经排成的一列中每一位同学的身高h(100\leqh\leq200)h(100≤h≤200)。对于100\%100%的数据0 阅读详情

Ynoi竟然出了个奈芙莲的题,少见啊

Ynoi竟然有个不卡常的题,更少见了


这道题其实思路非常好想,本质上就是一个暴力,但是要用到拓展欧拉定理,是什么呢?

a c ≡ { a c , c < ϕ ( p ) a c   m o d   ϕ ( p ) + ϕ ( p ) , c ≥ ϕ ( p )   m o d   p a^c\equiv\begin{cases}a^c,c<\phi(p) \\ a^{c\bmod \phi(p)+\phi(p)},c\geq\phi(p)\end{cases} \bmod p ac≡{ac,c<ϕ(p)acmodϕ(p)+ϕ(p),c≥ϕ(p)​modp

这个东西有什么用呢?做过这道题的就应该很明显了

我们观察 ϕ ( p ) \phi(p) ϕ(p)一定 ≤ n 2 \leq\frac{n}{2} ≤2n​,那么也就是说最多经过 log ⁡ p \log p logp次之后,我们的 ϕ ( ϕ ( ϕ ( . . . ϕ ( p ) ) ) ) = 1 \phi(\phi(\phi(...\phi(p))))=1 ϕ(ϕ(ϕ(...ϕ(p))))=1,这个时候根据我们上面的拓展欧拉定理,我们就不需要继续算剩下的部分了,因为剩下的部分算完肯定是 1 1 1

也就是说我们对于每次查询,从 x x x暴力往右扫,每次都让 p = ϕ ( p ) p=\phi(p) p=ϕ(p),那么经过一定次数之后剩下的就不用管了,然后我们再回溯更新这一部分的答案就可以

因为有区间加之类的操作,所以我们用树状数组维护差分,就可以求出每一个位置上的数是多少了

其实这题根这道题也挺像的吧,但是上帝那道题的数据比较水,我们会发现,当我们的 c < ϕ ( p ) c<\phi(p) c<ϕ(p)的时候,我们是不能 + ϕ ( p ) +\phi(p) +ϕ(p)的,这个东西就非常的恶心,我们需要特判一下

特判的方法也比较简单,我们在做快速幂的过程中,每次计算完先不取模,如果发现比 p p p大, f l a g = 1 flag=1 flag=1,然后再取模,做完快速幂之后再判断如果 f l a g = 1 flag=1 flag=1,那么再加上 ϕ ( p ) \phi(p) ϕ(p)

快速幂大概是这个样子的

int Qpow(int base,int ind,int mod){
    int res=1;
    flag=false;
    if(base>=mod)flag=true,base%=mod;
    while(ind){
        if(ind&1){
            res=res*base;
            if(res>=mod)flag=true,res%=mod;
        }
        base=base*base;
        if(base>=mod)flag=true,base%=mod;
        ind>>=1;
    }
    return res;
}

好长啊

查询的时候其实是不用写 d f s dfs dfs的,我们可以直接手动模拟栈,先把要求的部分的模数都预处理出来,然后从右往左算就可以

        else{
            int now=x;
            modn[x]=p;
            p=phi[p];
            while(p>1&&now<y){
                modn[++now]=p;
                p=phi[p];
            }
            int res=1;
            _Rep(i,now,x){
                res=Qpow(ask(i),res,modn[i]);
                if(flag)res+=modn[i];
            }
            printf("%lld\n",res%modn[x]);
        }

由于 p ≤ 2 × 1 0 7 p\leq 2\times10^7 p≤2×107,所以我们要线性筛,然后这题空间500MB,放心的开longlong吧。

其他细节没什么了,只要不像我一样线性筛出一堆锅就好


然后是这题的复杂度,我们发现,每次询问我们最多查询 log ⁡ p \log p logp次,每次需要 log ⁡ n \log n logn的时间,然后算快速幂需要 log ⁡ p \log p logp次的时间,所以这题的总复杂度应该是 O ( m log ⁡ n log ⁡ 2 p ) O(m\log n\log^2 p) O(mlognlog2p)

毒瘤的lxl这题仁慈的开了3s时限

代码:

#include <bits/stdc++.h>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define RepG(i,u) for(int i=head[u];~i;i=e[i].next)

typedef long long ll;

const int N=5e5+5;
const int M=2e7+5;

template<typename T> void read(T &x){
   x=0;int f=1;
   char c=getchar();
   for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
   for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
    x*=f;
}

# define int long long

int n,m;
int a[N],bit[N];
int phi[M],prime[N*10],tot;
int modn[N];
bool isp[M],flag;

int lowbit(int o){
    return o&-o;
}

void add(int o,int x){
    for(;o<=n;o+=lowbit(o))bit[o]+=x;
}

int ask(int o){
    int res=0;
    for(;o;o-=lowbit(o))res+=bit[o];
    return res;
}

void init()
{
    phi[1]=1;
    for(int i=2;i<=2e7;i++){
        if(isp[i])prime[++tot]=i,phi[i]=i-1;
        for(int j=1;j<=tot&&i*prime[j]<=2e7;j++){
            isp[i*prime[j]]=false;
            if(i%prime[j]==0){
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
            }
            else phi[i*prime[j]]=phi[i]*(prime[j]-1);
        }
    }
}

int Qpow(int base,int ind,int mod){
    int res=1;
    flag=false;
    if(base>=mod)flag=true,base%=mod;
    while(ind){
        if(ind&1){
            res=res*base;
            if(res>=mod)flag=true,res%=mod;
        }
        base=base*base;
        if(base>=mod)flag=true,base%=mod;
        ind>>=1;
    }
    return res;
}

signed main()
{
    memset(isp,true,sizeof(isp));
    read(n),read(m);
    Rep(i,1,n)read(a[i]);
    Rep(i,1,n)add(i,a[i]-a[i-1]);
    init();
    Rep(i,1,m){
        int opt,x,y,p;
        read(opt),read(x),read(y),read(p);
        if(opt==1){
            add(x,p);
            add(y+1,-p);
        }
        else{
            int now=x;
            modn[x]=p;
            p=phi[p];
            while(p>1&&now<y){
                modn[++now]=p;
                p=phi[p];
            }
            int res=1;
            _Rep(i,now,x){
                res=Qpow(ask(i),res,modn[i]);
                if(flag)res+=modn[i];
            }
            printf("%lld\n",res%modn[x]);
        }
    }
    return 0;
}

因为这题是Ynoi,所以来说点没用的

奈芙莲其实戏份挺少的,因为第四卷没有拍嘛

虽然她没有爱尔和珂朵莉的美貌

但是她达成了一件珂朵莉都没有达成的事,抱着威廉睡觉

而且,她是不是也算是在最后一刻绽放呢?

她难道不也是最幸福的女孩子吗?

在这里插入图片描述

ARTIX-7 GTP 3G-SDI 工程构建与调试实战 本文详细介绍了基于ARTIX-7 FPGA和GTP收发器的3G-SDI工程构建与调试实战。从基础概念解析到Vivado工程创建、GTP IP核配置、SDI IP核集成,再到系统集成与时钟域处理,提供了全面的技术指导。文章还分享了调试技巧、常见问题排查方法以及性能验证步骤,帮助开发者快速掌握3G-SDI视频传输技术的实现与优化。 阅读详情

相关推荐

DINOv3 网络结构解析:从 ViT 到 ConvNeXt 的双路线设计

本文深入解析了DINOv3网络结构的双路线设计,包括ViT和ConvNeXt两种主干架构。ViT路线通过轴向旋转位置编码解决了传统ViT对固定分辨率的依赖,而ConvNeXt路线则优化了卷积设计,提升了实时处理能力。文章还探讨了Gram Anchoring、混合自监督目标等关键技术,展示了DINOv3在多任务和多模态应用中的强大潜力。

weixin_29214199的博客 563

【BZOJ5394】【Ynoi2016】—炸脖龙(树状数组+广义欧拉定理)

传送门 考虑广义欧拉定理 直接暴力从左到右扫 这样最多logloglog次模数就变成1了 然后就没了 注意快速幂的时候记一下取没取模 每层不要乱取模,因为每次模数不一样 复杂度O(nlog2n+p)O(nlog^2n+p)O(nlog2n+p) 有点小卡空间 #include<bits/stdc++.h> using namespace std; const int RLEN=1&...

Stargazer的博客 320

从Power到HO:一文搞懂主流脑图谱在DPABI里怎么选,让你的rs-fMRI分析更精准

本文深入解析了rs-fMRI分析中主流脑图谱(如Power、HO、AAL等)在DPABI中的科学选择策略,帮助研究者根据不同的神经科学研究目标优化分析流程。从解剖学图谱到功能连接图谱的特性对比,到DPABI实操中的多图谱分析工作流,提供了全面的方法论指导,助力提升静息态功能磁共振成像(rs-fMRI)研究的精准度和可重复性。

weixin_30654583的博客 403

luogu P3934 [Ynoi2016] 炸脖龙 I

https://www.luogu.com.cn/problem/P3934 知道几个性质就能做了 拓展欧拉定理acmod  p=acmod  ϕ(p)+[c≥ϕ(p)]∗ϕ(p)\large a^c\mod p=a^{c \mod \phi(p)+[c\ge\phi(p)]*\phi(p)}acmodp=acmodϕ(p)+[c≥ϕ(p)]∗ϕ(p) ϕ(x)\phi(x)ϕ(x)嵌套大概log次会变成1(考虑奇数变成偶数,偶数除2) 然后这题那个树状数组维护一下区间加就行了 code: #inclu

lahlah的博客 434

Pixel 6 Pro刷Android 13变砖自救指南:fastboot全分区擦除与手动刷入教程

本文提供了一份详细的Pixel 6 Pro在Android 13升级过程中变砖后的自救指南。针对因super分区锁死或动态分区异常导致的无法启动问题,文章核心介绍了通过fastboot命令手动擦除关键分区并逐一刷入官方镜像的完整救砖流程,帮助用户实现系统重建与恢复。

weixin_29208327的博客 371

机器学习特征选择-t检验

在特征选择的过程中通过计算检验统计量值,比较特征之间的统计量的大小,并降序排列,选取统计值较高的特征,从而起到去除差别小的特征(此差别小的特征难以区分不同的额类别)的目的。 以t检验(Student's t test)为例: 假设检验 通过比较两类样本的随机变化,通过计算其p值决定是否拒绝零假设,也即是说:通过计算p值,若p值小于某一阈值则认为两个样本具有显著差异,两个样本是不同的,此时拒绝...

heda3的博客 6700

Ynoi(5/35)

luoguP5309 [Ynoi2012]D1T1 luoguP5310 [Ynoi2012]D1T2 luoguP5311 [Ynoi2012]D1T3 luoguP5312 [Ynoi2012]D2T1 luoguP5313 [Ynoi2012]D2T2 luoguP5314 [Ynoi2012]D2T3 luoguP5062 [Ynoi2014]在太阳西斜的这个世界里 luog...

weixin_30664539的博客 1352

Python 爬虫实战:爬取哔哩哔哩知识区,抓取高赞课程信息

哔哩哔哩(Bilibili)是一个广受欢迎的综合性视频社区,其中的知识区汇聚了大量优质的教育、科普、技术等课程内容。本文将指导读者如何使用 Python 爬虫技术从哔哩哔哩知识区抓取高赞课程信息,并进行数据分析。本文深入探究了利用 Python 爬虫技术从哔哩哔哩知识区抓取高赞课程信息的全流程。从前期的环境搭建、模拟登录,到核心的课程数据抓取、存储,再到后续的数据分析与可视化,都详细展开讲解并提供代码支持。通过此方法所获取的数据,能够助力创作者优化内容、用户发现优质课程、平台洞察用户需求。

u014481728的博客 1134

YNOI板刷计划&记录

离开学还有7天,尝试刷30道YNOI并写题解 冲冲冲

lahlah的博客 861

Linux ARM平台开发系列讲解(GMSL摄像头篇)1.2 MAX9296 GMSL链路配置

串行器 +解串器组成,软件需要做的就是写这三部分的驱动,让摄像头数据能到达。3. 配置解串器和串行器的GMSL链路。串行器和解串器上电成功之后,就可以配置。软件配置(注意软件只可以配置速率,2. 9296上电,使能芯片。的版本和速率,比如版本是配置。配置成功之后,就会出现串行器。的链路,其它同类型的。设备地址,我设置的是。...

DSMGUOGUO的博客 1万+

C#跨平台制图新纪元:Mapsui,一库在手,地图我有

深入学习Mapsui的渲染机制,定制属于你的地图样式,无论是颜色、图标还是文字,都可以随心所欲。

java专栏 1455

【口胡】Ynoi刷题记录

[Ynoi2019 模拟赛] Yuno loves sqrt technology III 分块后,预处理 Fi,jF_{i,j}Fi,j​表示第 i∼ji\sim ji∼j块的众数的出现次数。 用vector按顺序存每个数值所有元素的出现位置。 再记录每个元素在相应vector里的下标 ppp。 考虑询问,中间的直接使用预处理出的 Fi,jF_{i,j}Fi,j​的值即可。设当前的答案 ans=Fi,jans=F_{i,j}ans=Fi,j​。 考虑边界的元素。这里我们运用迭代的思想。对于右边的边角元素

cqbzlydd的博客 582

智能合约监控告警:提示工程架构师用AI Prompt实现精准预警

当AI大模型(尤其是代码理解模型如CodeLlama、GPT-4 Code)与区块链数据结合,智能合约监控迎来范式革新。AI模型如何精准理解智能合约的业务特殊性?如何避免"AI幻觉"导致的误报?如何让模型学会区分"正常异常"与"攻击前兆"?答案藏在"提示工程"(Prompt Engineering)中。理解特定智能合约的业务逻辑(如DeFi协议的清算机制、NFT的铸造规则)识别复杂的攻击模式(如重入攻击的调用链特征、闪电贷的套利路径)结合链上链下数据进行多维度推理(如关联价格波动与异常交易)

AI架构全栈开发实战笔记 1010

[洛谷P4118][Ynoi2016]炸脖龙I([洛谷P3934]Nephren Ruq Insania)

题目大意:有$n$个数,每个数为$s_i$,两个操作: $1\;l\;r\;x:$表示将区间$[l,r]$内的数加上$x$ $2\;l\;r\;p:$表示求$s_l^{s_{l+1}^{^{s_{l+2}\dots}}}\bmod p$直到$s_r$ 题解:区间加可以通过树状数组维护,考虑操作二,由扩展欧拉定理可得:$$a^b\equiv\begin{cases}a^{b\bmod{...

weixin_34375054的博客 322

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Ynoi 做题记录

为了方便处理,我们先将相邻两个数对应区间的答案作为线段树叶子结点对应的区间。然后在线段树上维护一个类似 dp 的数组。,表示区间最左端和最右端的数 没有被覆盖 / 被覆盖 / 是极大值。所以只需要关注操作中心的集合就可以了。然后我们考虑用线段树维护。然后类似 dp 地在线段树上合并。减一的操作一直进行到。,不会改变最终答案。

FuDuoDuo_qwq的博客 346

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Ynoi2011 初始化

## 题目大意 有$n$个数$a_i$,有以下两种操作: - 修改操作:将下标为$y,y+x,y+2x,\dots$的$a$值增加$z$,保证$y\leq x$ - 查询操作:查询下标在区间$[l,r]$上的$a$值之和模$10^9+7$后的值

tanjunming2020的博客 1325

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[Ynoi2016]镜中的昆虫

题目大意: 给定一个序列,有2个操作: 1. 区间覆盖。2. 区间数颜色。 解题思路: 珂朵莉树+树套树。 看到区间覆盖当然想到珂朵莉树然而这是Ynoi 所以我们得优化掉珂朵莉树那个暴力过程。 考虑对每个位置,记录它这个颜色前一次出现的位置pre(它本身是第一次则为0)。 对一段颜色相同的区间,除了第一个位置,其他位置的pre都是位置-1。 用树套树,第一维为原本位置,...

282

P5072 [Ynoi2015] 盼君勿忘

出现的次数可以用c[N]计数,出现该次数的数可以用sum[N]记录,有几种k可以用双向链表记录或者set,(选择unordered_set常数比较小)学了一下双向链表,unordered_set, 光速幂感觉比做思维题有收获。假设存在一个x,它在[l,r]区间出现了k次,我们想计算它的贡献。k最多有sqrt(n)个 如果用快速幂预处理的话时间复杂度是。sn是等差求和 k=1,k=2,k=3...理论上来说能过?反向考虑一下,我们知道子字串的数量,没有x的子字串的数量。考虑计算每个数对答案所作的贡献。

Lanthamum的博客 441

[Ynoi2011]竞赛实验班

其实Ynoi并不需要分块

StaroForgin的博客 464

Ynoi数据结构题单练习1

给定平面上 nnn 个互不相同的点 (xi,yi)i=1n(x_i,y_i)_{i=1}^n(xi​,yi​)i=1n​,每个点有点权,初始为 viv_ivi​;共 mmm 次操作:修改操作:给定 XXX,将满足 xi=Xx_i=Xxi​=X 的点的点权 viv_ivi​ 修改为 vi2v_i^2vi2​;查询操作:给定 YYY,求满足 yi=Yy_i=Yyi​=Y 的点的点权 viv_ivi​ 的和;答案对 109+710^9+7109+7 取模。第一行两个整数 n,mn,mn,m;接下来 nnn 行,每

weixin_73725403的博客 902

[Ynoi2017] 由乃打扑克(区间第k小)

题目描述很简单,就是区间修改,求区间第k小。如果只是求区间第k小,我们可以使用整体二分,时间复杂度Onlog2n,也可以使用在值域主席树上二分,时间复杂度Onlogn。如果带一个单点修改,我们还可以使用整体二分,把修改拆成两个赋值操作,时间复杂度Onlog2n,当然也可以使用树套树来解决(但是我不会),时间复杂度Onlog2n但是如果是区间修改,整体二分和主席树就不太够用了,对于这种难搞的序列操作,考虑分块。

mamingzhi_2026的博客 315

Ynoi2019模拟赛题解

洛谷 P3046 P3047 P3048 (Ynoi)(2019)(分块)(莫队)

GoSPFA的博客 371

P5412 [YNOI2019] 排队

题目大家都看懂了吧,就是给你一串小数,让你给它们排序,然后按男生女生输出。其实知识点就是一个结构体排序啊,而且也没有什么坑点......因为数据比较水,所以没有写得那么严谨(

weixin_52347463的博客 792

bzoj 5394: [Ynoi2016]炸脖龙 数论+树状数组

给一个长为n的序列,m次操作,每次操作: Input 第一行两个整数 n,m 表示序列长度和操作数 接下来一行,n个整数,表示这个序列 接下来m行,可能是以下两种操作之一: 1 l r x 表示区间[l,r]加上 x 2 l r p 表示对区间[l,r]进行一次查询,模数为 p n , m &lt;= 500000 , 序列中每个数在 [2,1e9] 内,p &lt;= 2e7,...

执子之手,与子偕老 1068

[YNOI2017]bzoj 4811 由乃的OJ - 树剖 - 线段树

树剖,线段树维护每一位经过这个区间从左到右和从右到左0和1分别变成了啥,三个log稳T。发现其实只需要维护00000…000和1111…111会变成啥即可,这样就两个log了。 #include&amp;lt;iostream&amp;gt; #include&amp;lt;cstring&amp;gt; #include&amp;lt;cstdio&amp;gt; #include&amp;lt;algorithm&amp;gt; #inc

Mys_C_K的博客 360

P5309 [Ynoi2011] 初始化 题解

看到 Ynoi 题,就要想到根号算法 + 卡常。这什么毒瘤卡常题() 显然对序列分块,这样可以维护查询,但是怎么修改呢? 考虑到修改操作的步长为 xxx,那么设一个阈值 ppp,对于 x≥px \geq px≥p 暴力跳暴力修改,对于 x<px < px<p 另外想办法,实际上就是一个根号分治思想。 发现题目保证 y≤xy \leq xy≤x,于是我们可以假想以 xxx 为周期进行序列分块,然后发现我们只需要维护这个块的第一个块的信息,就可以推知整个序列的信息,因为这玩意有周期性。 然后对

Plozia 的小窝 393
上一篇: 2020.5.5集训总结
下一篇: [Ynoi2013]大学/我永远喜欢珂朵莉~
NephrenRuqInsania
博客等级 码龄8年 20粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值