[BZOJ2962]序列操作(线段树)

Android Geckoview实战:5分钟搞定JS与原生交互(附完整Demo代码) 本文详细介绍了在Android应用中使用GeckoView替代系统WebView,构建稳定高效的JavaScript与原生代码交互桥梁的实战方法。通过WebExtension架构,文章提供了从环境配置、扩展开发到Android端集成的完整步骤,并附有可运行的Demo代码,帮助开发者快速解决混合应用中的兼容性问题。 阅读详情

=== ===

这里放传送门

=== ===

题解

这题真——坑——啊——。。。。。。
前两个操作都不难搞,重点是如何完成什么选c个数相乘之类的乱七八糟上。然后愚蠢的ATP就开始做暴力展开 (a+b+c+d)3 这样丧病的事情来找规律。。因为c比较小所以可以考虑每次操作的时候带上一个 c 或c2的时间复杂度,所以考虑如何从c比较小的答案来得到c比较大的答案。对于 c=1 的时候,答案直接就是这一串数的和; c=2 的时候,答案是 ab+ac+bc ,并且假设我们已经得到了 c=1 的答案 a+b+c ,那么一种比较显然的方法就是把 a+b+c 平方,于是我们就得到了形如 2ab 这样的项。但这里面还出现了 a2 这样的项,要把它们减掉。这种情况倒是比较好搞,维护一个平方和啥的就行了。但是三次方的时候还是这样的规律吗?如果要用 c=2 的答案得到 c=3 时候的答案,也就是说我们现在有了 ab,ac,bc ,要把它们变成 abc ,于是可以类比上面的方法,把这三个东西都乘以 (a+b+c) 。然而这就又多出来了一些形如 a2b 这样的项,为了把它们减去,要用 (a+b+c) 乘以平方和。但这样就又出现了 a3 这样的项,所以还要维护立方和……

啊那反正这样就很显然了。用 sum[n] 来表示区间n次方和,用 ans[n] 来表示 c=n 时候的答案。考虑如何用已经求过的ans来得到新的ans,首先对于 ans[n] 来说,它里面包含的所有项的次数都比 ans[n−1] 多了1,要增加次数就要乘以 sum[1] 。但是这样就出现了一些形如 a2b 的,某个字母次数为2的项,要把它们减去。于是就用 sum[2] 确保一定有字母次数为2,为了保证总次数一定要乘以 ans[n−2] 。这样就又多减了某些字母次数为3的项要加回来……于是就有:

a[n]=1n∑i=1nsum[i]∗ans[n−i]∗(−1)i−1

那就是求个逆元的问题咯?耶!于是愚蠢的ATP就开始开心的写啊写啊写。。于是就在这里出现了这个做法最恶心最致命,卡了愚蠢的ATP和cloverhxy整整三天的问题——它内个模数不是质数!是7的倍数!也就是说7在模这玩意儿意义下是没有逆元的。。那让我咋求 ans[7] ?!还有 ans[14] ?!当时我们差点都弃疗了,还考虑过丧心病狂的中国剩余定理。。。最后我们的TA学长给我们带来了希望_ (:з」∠)_——

我们之所以在模意义下做除法需要逆元,是因为如果除数i是模数Mod的因数,一直在模Mod再直接做除法的话会导致一些本来会对商数构成贡献的部分“不小心”被模掉。但是如果把模数换成Mod*i的话会怎么样呢?这样的话所有模掉的部分都是Mod*i的倍数,即使把它们模掉,对我们所求的模Mod意义下的商数也是构不成影响的,这样就可以直接做除法了!需要注意的问题是在整个代码中模数是不能变的,不能一会模这个一会模那个。一开始没有注意这个问题,光在做除法的时候模了Mod*i。。。应该先全程模Mod*i,在最后输出结果的时候再模Mod。

一开始还不明白那既然有了这个方法为啥还要求逆元叻。。原来是因为如果这么做的话除数必须是固定的,也是因为不能中间换模数的原因。这样的话直接做除法的时候只能除以7。但是14在模19940417的意义下也没有逆元。。这个也好办,先除以7再乘以2的逆元就可以了。

统计答案的问题解决了,接下来是修改的问题。做加法的时候直接用杨辉三角的多项式展开系数搞一下就可以了,但还有一个取反操作,这就出现了标记冲突的问题。。解决这种问题的关键是通过安排标记处理的顺序来解决冲突,比如这里是先处理取反标记后处理加法标记,如果打加法标记的时候节点上还有一个取反标记就不需要管它了,pushdown的时候会自动先处理取反标记的。但打取反标记的时候如果节点上还有一个加法标记,就要考虑一下对加法标记做一些处理了。方法也很简单把加法标记取反就可以了。

到此为止这个题终于解决啦!时间复杂度 O(c2nlogn) 。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const long long Mod=19940417*7;
const long long Mod2=19940417;
int C[30][30],n,q,v[50010];
struct segtree{
    long long sum[22],dlt;
    bool rev;
    segtree(){memset(sum,0,sizeof(sum));sum[0]=1;dlt=rev=0;}
}t[200010],ans;
void get_C(){
    for (int i=0;i<=20;i++) C[i][0]=1;
    for (int i=1;i<=20;i++)
      for (int j=1;j<=i;j++)
        C[i][j]=C[i-1][j]+C[i-1][j-1];//组合数忘记取模它竟然没有炸掉。。
}
long long powww(long long a,int t){
    long long ans=1;
    while (t!=0){
        if (t&1) ans=ans*a%Mod;
        a=(a*a)%Mod;t>>=1;
    }
    return ans;
}
long long gcd(long long a,long long b){
    long long r=a%b;
    while (r!=0){
        a=b;b=r;r=a%b;
    }
    return b;
}
void exgcd(long long a,long long b,long long &x,long long &y){
    if (b==0){x=1;y=0;return;}
    long long t;
    exgcd(b,a%b,x,y);
    t=x;x=y;y=t-a/b*y;
}
long long getinv(long long x){
    long long g=gcd(x,Mod),inv,tmp;
    exgcd(x/g,Mod/g,inv,tmp);
    return ((inv*g%Mod)+Mod)%Mod;
}
void Neg(int i){
    if (t[i].dlt!=0) t[i].dlt=-t[i].dlt;//如果有加法标记打在它之前,先把加法标记取反
    for (int j=1;j<=20;j++)
      if (j%2==1) t[i].sum[j]=-t[i].sum[j];
    t[i].rev^=1;
}
void Inc(int now,long long v){
    segtree tmp=t[now];//要用临时数组把它存起来
    int dlt=v;
    for (int i=1;i<=20;i++){
        t[now].sum[i]=0;//注意清零
        for (int j=0;j<=i;j++)
          t[now].sum[i]+=(tmp.sum[i-j]*powww(dlt,j)%Mod*C[i][j])%Mod;
        t[now].sum[i]=(t[now].sum[i]%Mod+Mod)%Mod;
    }
    t[now].dlt=(t[now].dlt+v)%Mod;
}
void update(int i){
    for (int j=0;j<=20;j++)//更新的时候要把0次方也一起更新
      t[i].sum[j]=(t[i<<1].sum[j]+t[(i<<1)+1].sum[j])%Mod;
}
void pushdown(int i,int l,int r){
    if (t[i].rev==true){
        Neg(i<<1);Neg((i<<1)+1);t[i].rev=false;
    }
    if (t[i].dlt!=0){
        int mid=(l+r)>>1;
        Inc(i<<1,t[i].dlt);
        Inc((i<<1)+1,t[i].dlt);
        t[i].dlt=0;
    }
}
void build(int i,int l,int r){
    if (l==r){
        t[i].sum[1]=v[l]%Mod;
        for (int j=2;j<=20;j++)
          t[i].sum[j]=t[i].sum[j-1]*v[l]%Mod;
        return;
    }
    int mid=(l+r)>>1;
    build(i<<1,l,mid);
    build((i<<1)+1,mid+1,r);
    update(i);
}
void add(int i,int l,int r,int left,int right,long long v){
    if (left<=l&&right>=r){
        Inc(i,v);
        return;
    }
    int mid=(l+r)>>1;
    pushdown(i,l,r);
    if (left<=mid) add(i<<1,l,mid,left,right,v);
    if (right>mid) add((i<<1)+1,mid+1,r,left,right,v);
    update(i);
}
void rever(int i,int l,int r,int left,int right){
    if (left<=l&&right>=r){
        Neg(i);return;
    }
    int mid=(l+r)>>1;
    pushdown(i,l,r);
    if (left<=mid) rever(i<<1,l,mid,left,right);
    if (right>mid) rever((i<<1)+1,mid+1,r,left,right);
    update(i);
}
segtree merge(segtree a,segtree b){
    segtree c;
    for (int i=0;i<=20;i++)//注意这里0的也要合并
      c.sum[i]=(a.sum[i]+b.sum[i])%Mod;
    return c;
}
segtree ask(int i,int l,int r,int left,int right){
    if (left<=l&&right>=r) return t[i];
    int mid=(l+r)>>1;
    segtree lans,rans;
    lans.sum[0]=rans.sum[0]=-1;
    pushdown(i,l,r);
    if (left<=mid) lans=ask(i<<1,l,mid,left,right);
    if (right>mid) rans=ask((i<<1)+1,mid+1,r,left,right);
    if (lans.sum[0]==-1) return rans;
    if (rans.sum[0]==-1) return lans;
    return merge(lans,rans);//合并左右区间的答案
}
long long Query(segtree s,int c){
    long long ans[22],dlt=-1,inv;
    memset(ans,0,sizeof(ans));
    ans[0]=1;
    for (int i=1;i<=c;i++){ 
        dlt=-1;inv=getinv(i);
        for (int j=1;j<=i;j++){
            dlt=-dlt;//控制容斥系数
            ans[i]=(ans[i]+dlt*ans[i-j]*s.sum[j]%Mod)%Mod;
        }
        ans[i]=(ans[i]%Mod+Mod)%Mod;
        if (i!=7&&i!=14) ans[i]=(ans[i]*inv)%Mod;//如果被除数和模数互质,直接用逆元
        else
          if (i==7) ans[i]=(ans[i]%Mod)/i;
          else{//特判没有逆元的情况
              ans[i]=(ans[i]%Mod)/7;
              inv=getinv(2);
              ans[i]=(ans[i]*inv)%Mod;
          }
    }
    return (ans[c]%Mod2+Mod2)%Mod2;
}
int main()
{
    get_C();
    scanf("%d%d",&n,&q);
    for (int i=1;i<=n;i++) scanf("%d",&v[i]);
    build(1,1,n);
    for (int i=1;i<=q;i++){
        char c=getchar();
        int l,r,k;
        while (c!='I'&&c!='Q'&&c!='R') c=getchar();
        scanf("%d%d",&l,&r);
        switch (c){
            case 'I':{
                scanf("%d",&k);
                add(1,1,n,l,r,k);
                break;
            }
            case 'R':{rever(1,1,n,l,r);break;}
            case 'Q':{
                scanf("%d",&k);
                ans=ask(1,1,n,l,r);//ans结构体带回所求区间里所有数的1..20次方和
                printf("%I64d\n",Query(ans,k));
                break;
            }
        }
    }
    return 0;
}

偏偏在最后出现的补充说明

这题直接就是练代码能力= =
还有厉害的处理没有逆元情况下做除法的方法= =
真·丧心病狂= =

基于SHIS凝视型短波红外高光谱相机(900-1700nm)区分不同宝石的差异性和可分性(宝石分选) SHIS系列凝视型高光谱相机基于液晶可调谐滤波器(LCTF),通过电控LCTF进行连续细分窄波段分光,对每个波段进行高分辨率的二维面阵成像,进行图像处理后,获得完整的高光谱高清图像序列。具有低功耗、小型化、使用方便和易于扩展的优势。其工作波段覆盖400nm至1000nm,能够捕捉宝石在不同波长下的光谱特征,为宝石鉴定提供了新的工具。 阅读详情

相关推荐

告别二极管发热!手把手教你用MOS管搭建同步整流电路(附死区时间设置避坑指南)

本文详细介绍了如何利用MOS管搭建同步整流电路(SR),以替代传统二极管,显著降低导通损耗和发热问题。内容涵盖自驱动方案的选择、关键元件参数计算、PCB布局要点及死区时间设置技巧,帮助工程师优化电源设计效率。

weixin_29540599的博客 452

AI辅助文献综述写作:痛点解析与Paperzz实操指南

文献综述是学术研究的基础环节,涉及海量文献的筛选、分析与整合。传统人工处理面临效率低下、框架混乱等痛点,而AI技术的引入正在改变这一现状。通过自然语言处理(NLP)和机器学习算法,智能工具能实现文献自动聚类、影响力评估和关系图谱构建,大幅提升研究效率。以Paperzz为代表的AI写作助手,整合了选题推荐、文献管理和内容生成三大核心功能,特别适合金融学、计算机等跨学科领域的研究者。在实际应用中,需要注意平衡AI辅助与人工校验的关系,遵守学术伦理规范,将AI产出控制在30%以内。合理使用这些工具,研究者可节省6

aodanchui1057的博客 379

高通平台Android稳定性调试笔记:手把手教你用T32、Crash Utility分析Kernel Panic与RAM Dump

本文详细介绍了高通平台Android内核崩溃的分析方法,包括使用T32 Simulator和Crash Utility工具链解析Kernel Panic与RAM Dump。从环境配置、dump文件预处理到高级调试技巧,手把手教你如何定位和解决Android系统崩溃问题,特别适用于MSM/SA8155平台的开发者。

weixin_42543046的博客 527

[bzoj2962]序列操作

题目大意你需要兹瓷对序列的三种操作: 1、区间加上一个数。2、区间取相反数。3、区间任意取k个数的积的和(k<=20)线段树我们需要维护两个标记,当线段树要维护多个标记时,如何处理标记之间的影响和如何下传标记成了问题。 这里推荐一下来自Fuxey的处理标记的有效原则 先看另一道题有趣的有趣的家庭菜园 在那道题中,线段树需要同时维护取max和加法标记。我们规定的执行顺序是先做取max再做加法。

不来也不去的一只失忆蝴蝶 1739

自适应IIR格型滤波器的Matlab实现

概述 在现有的众多抑制窄带干扰的信号处理手段中,时域自适应陷波干扰抑制技术具有实现简单、抗干扰性能好等优点。IIR陷波器按照结构可以分为直接型和格型两种。相比自适应直接型IIR陷波器,自适应格型IIR陷波器不仅可以准确地控制滤波器的陷波频率,也可以准确地调整陷波器的带宽。 传递函数 二阶自适应IIR格型陷波器的传递函数H(z)为: 其中α与陷波带宽有关,β与陷波频率有关;对应的结构如下图所示: Matlab算法实现 ...

剑藏锋的博客 2800

保姆级教程:在Windows上用Python+OpenCV调用海康工业相机(附MVS配置避坑指南)

本文提供了一份详细的Windows环境下使用Python和OpenCV调用海康工业相机的保姆级教程,涵盖MVS配置避坑、相机连接、图像获取与格式转换等关键步骤。特别针对工业相机取流中的常见问题,如独占访问控制和多相机协同工作,提供了实用解决方案,帮助开发者快速实现稳定的图像采集系统。

weixin_29228781的博客 399

bzoj2962 序列操作 线段树

题意:一段序列,三种操作: 1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这一段区间中选择c个数相乘的所有方案的和mod 19940417的值。一开始没看到k<=20,觉得不可做,后来一看,哦这不就水了很多了。。 操作3的话维护f[i]表示当前区间选择i个的答案,那么n^2更新,明显有:

老臣 1653

【AI大模型:前沿】44、大模型+机器人:从自动化工具到通用智能体的技术革命与应用全景

大模型与机器人的融合催生了“具身智能体”,突破传统机器人智能化缺失、功能单一等瓶颈。大模型赋予机器人三大能力:常识推理(如热牛奶需去包装)、模糊指令解析(如“整理书桌”拆解步骤)、零样本任务泛化(如搭乐高桥)。技术实现上,通过多模态融合(视觉-语言-动作)、仿真训练(虚拟试错)和实时反馈(动态调整动作)形成闭环。主流框架如Google RT-2(端到端动作生成)、斯坦福Q-Transformer(强化学习优化)和Figure 01(ChatGPT驱动人形机器人)各具优势,可适配工业、家庭等场景。该技术正重塑

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 2019

BZOJ2962 序列操作

看这数据范围,我还以为是分块……分完了块发现复杂度n根号n*400根本过不了,然后发现根本不用分块,直接线段树就行了  每个区间维护c=0到20的时候的答案,认为当c=0时答案为1  合并两个区间的时候就枚举左边选i个右边选j个,乘起来加到选i+j的答案上去,类似卷积  考虑如何打两个修改操作的标记  首先说翻转操作,把所有c为奇数的答案取反,把加标记取反,就可以了,下传的时候先传翻转再传

neither_nor 812

【RT-DETR涨点改进】小目标检测、特征融合改进篇 | TGRS 2024 | RT-DETR引入CSFM上下文选择融合模块,适合多模态检测、红外小目标检测、小目标检测、遥感目标检测等任务有效涨点

本文提出了一种改进RT-DETR目标检测模型的方法,通过引入上下文选择融合模块(CSFM)显著提升复杂背景下小目标和低对比度目标的检测精度。CSFM模块采用多尺度特征融合和动态特征选择机制,有效增强模型的全局上下文感知能力,同时保留细节特征。该模块通过通道减少机制和空间信息调节,实现从粗到细的特征聚合,减少误报并提高轮廓检测精度。实验表明,改进后的RT-DETR模型在多个基准测试中表现优异,计算效率与检测精度均优于现有方法。文章还详细介绍了模块配置和yaml文件修改方法,为模型部署提供指导。

Ai缝合怪、助力小伙伴高效发论文 1724

HBase在物流行业的应用:轨迹数据存储

想象一下,每天在全球范围内,数以亿计的物流包裹在各个城市、乡镇间穿梭。每一个包裹从发货人手中出发,经过仓储中心、转运站,最终到达收货人手中,这一路上都留下了它的“足迹”,也就是我们所说的轨迹数据。这些数据就像一个个拼图碎片,完整拼接起来后,能够清晰地呈现出整个物流网络的运行状况。例如,你在网上购买了一件心仪已久的商品,迫不及待地想知道它现在到哪儿了。物流平台实时更新的轨迹信息,让你可以准确了解包裹是在运输途中,还是已经到达附近的站点。

架构师的AI之路,分享AI应用开发架构的学习与实践。 965

bzoj2962 序列操作

链接bzoj2962 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这一段区间中选择c个数相乘的所有方案的和mod 19940417的值。 我好菜啊qwq 这题要求维护一个序列,我们可以用线段树来维护。其中有两种变换操作, 一种查询操作。 查询操作是查询

qq_38081877的博客 317

豆包手机为什么能自己“玩手机”?原理是什么?豆包手机系统运行机制深度解析:读屏、抓取、推理链路全拆解

作为一个每天被前端 Bug 打醒的程序员,我这一阵子在关注“豆包手机”这个关键词,刷到的相关视频简直铺天盖地。朋友们,说句实话,我一开始也只是抱着“看看热闹”的心态,最近一位博主下面的内容,不是“它能做什么”,而是。如果你之前看过很多评测,这篇文章会给你完全不一样的视角。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1015

[bzoj2962]序列操作_线段树_区间卷积

序列操作 bzoj-2962 题目大意:给定一个n个数的正整数序列,m次操作。支持:1.区间加;2.区间取相反数;3.区间求选c个数的乘积和。 注释:$1\le n,m\le 5\cdot 10^4$,$1\le c\le 20$。 想法: 首先切入点非常明显,我们发现c只有20。 又因为前两个操作给我们提示:不难想到用线段树维护。 那么线段树上的每个节点维护21个值su...

dianan0938的博客 221

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【BZOJ2962】序列操作 线段树

【BZOJ2962】序列操作 Description   有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这一段区间中选择c个数相乘的所有方案的和mod 19940417的值。 Input   第一行两个数n,q表示序列长度和操作个数。  第...

weixin_30547797的博客 109

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【BZOJ2962】序列操作(线段树)

【BZOJ2962】序列操作(线段树) 题面 BZOJ 题解 设\(s[i]\)表示区间内选择\(i\)个数的乘积的和 考虑如何向上合并? \(s[k]=\sum_{i=0}^klson.s[i]*rson.s[k-i]\) 相当于是一个卷积形式 区间取相反数是一个很好处理的操作 把所有的\(s[k],k\&amp;1=1\)取相反数就好了 区间加法? 假设我们已经知道了原来的所有的答案 ...

weixin_30727835的博客 206

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

bzoj 2962: 序列操作 线段树

显然需要用线段树维护一个数组p[c]表示选c个数相乘的方案总和。合并的时候只要枚举c,然后枚举左边选几个数然后和右边的乘起来累加进去就好了。取反实际上就是把所有c为奇数的取反,关键是区间加。        对于[l,r],区间+x,那么枚举c。注意到形式是这样的:        newp[c]=Σ(a1+x)(a2+x)...(ac+x),然后按照x的次数合并同类项,可以发现这个东西可以通过x

lych的博客 945

BZOJ 2962 序列操作 线段树

题目大意:给定一个序列,给定一个长度为n的序列,维护三种操作: 区间加 区间变为相反数 求某个区间内任取c个不同的数乘积的所有方案之和对P的模 比如说a b c三个数中取两个 就是ab+ac+bc 这题显然是用线段树来维护下- - 我们用一个0~20的数组a来记录某个区间的信息,其中a[i]表示区间内取i个数的乘积之和 区间合并就是a[i]=Σb[j]*c[i-j] 这个很好理解

世界 2131

【bzoj2962】【序列操作】【线段树】

Description   有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这一段区间中选择c个数相乘的所有方案的和mod 19940417的值。 Input   第一行两个数n,q表示序列长度和操作个数。   第二行n个非负整数,表示序

sunshinezff的专栏 691

bzoj 2962 序列操作(线段树)

题外话做这道题我整个人都非常的绝望,推了一会发现是线段树裸题,然后调了N久一直是WA情况是这样的开始WA的几百毫秒的都是由于我比较SB造成的,可是跑了10几秒的程序我查了N久也查不出错最后灵机一动把50000改成60000就过了,也不知道为啥最后灵机一动把50000改成60000就过了,也不知道为啥T_TDescription一个长度为n的序列,有3种操作一个长度为n的序列,有3种操作1:区间加c1

mlzmlz95的专栏 2061

bzoj 2962 序列操作 线段树

这个题卡常数。。首先c比较小,所以可以考虑dp转移,对于合并子序列就直接枚举跨区间的就可以了对于反转操作,要注意只有奇数位置才会变成相反数对于增加操作,可以考虑抽象成组合数学问题:对于(a1+b)*(a2+b)+(a1+b)*(a3+b)+(a2+b)*(a3+b),拆下来就是每一项都会和不同的两项相乘,转化到上图上就相当于每组选k个左边的,c-k个右边的,然后组合数学算一下就可以了码:#incl...

-----PSI----- 376

bzoj2962 序列操作 线段树+组合数学

Description 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这一段区间中选择c个数相乘的所有方案的和mod 19940417的值。    100%的数据n&lt;=50000,q&lt;=50000,初始序列的元素的绝对值&lt;=109,I a ...

olahiuj的博客 224

【bzoj2962】序列操作 线段树

题目描述 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这一段区间中选择c(c<=20)个数相乘的所有方案的和mod 19940417的值。 输入 第一行两个数n,q表示序列长度和操作个数。第二行n个非负整数,表示序列。接下来q行每行输入一个操作I...

weixin_30505751的博客 91

bzoj 2962 序列操作 —— 线段树

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2962 维护 sum[i] 表示选 i 个的乘积和,合并两个子树就枚举两边选多少,乘起来即可; 取反只需要把奇数个数的乘积和变成相反数即可; 关键是区间 + k:比如对于一个元素,原来是 a, b, c,+ k 变成 (a+k), (b+k), (c+k) 从每个括号里选 a,b,c ...

weixin_30794851的博客 94

bzoj2962: 序列操作(线段树+组合数学)

传送门 线段树基础题。 题意:要求维护区间区间中选择ccc个数相乘的所有方案的和(c≤20c\le20c≤20),支持区间加,区间取负。 由于c≤20c\le20c≤20,因此可以对于每个线段树节点可以暴力维护212121个sumsumsum值,合并也很简单,是一个卷积的形式sumi=∑j=0isumjsumi−jsum_i=\sum_{j=0}^isum_jsum_{i-j}sumi​=∑j=...

苟为蒟蒻又何妨 275
上一篇: [BZOJ4517][Sdoi2016]排列计数(组合数+逆元)
下一篇: [BZOJ2154]Crash的数字表格(数论)
FromATP
博客等级 码龄10年 75粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值