当前位置: 首页 > news >正文

LGP8969 幻梦 Dream with Dynamic

LGP8969 幻梦 Dream with Dynamic

\(\texttt{Luogu Link}\)

前言

唉,强校。

抛开别的不谈,这题意外地好懂……吗?

本学习笔记解析部分抄袭此文,代码抄袭此文。

题意简述

有一个长度为 \(n\) 的序列 \(A\),有初值。需支持三种操作共 \(m\) 次:

  • A l r x\(\forall i\in [l,r]\)\(a_i\gets a_i+x\)
  • P l r\(\forall i\in [l,r]\)\(a_i\gets \text{ppc}(a_i)\)
  • J u:查询 \(a_u\) 的值。

\(n\le 3\times 10^5\)\(q\le 10^6\)\(a_i,x\le 10^9\)

做法解析

看起来和有些势能线段树很像?然而这题的势能没什么良好性质。那咋办。

但是 \(\text{ppc}\) 有非常良好的性质。它的值域只有 \(\log V\)。怎么用呢?

首先我们查询只有单点的,这两种修改在线段树上成区间地作用是简单的。所以我们思考单点受到的操作就行了。

我们来把操作序列写出来:\(\texttt{apapppaaaapaapa}\)

连串的加法是容易复合的,不妨把它们缩到一段,再按 \(\texttt{p}\) 割开操作序列:

\(\texttt{ap|ap|p|p|ap|ap|a}\)。这是若干个 \(\text{ppc}(x+b)\to x'\) 的复合,满足 \(x,x'\) 值域和定义域都在 \(\log V\) 范围(除了最开始的 \(x\))。我们对于 \(w\in [0,\log V]\),维护 \(F(w)=f_k(f_{k-1}(f_{k-2}(\dots f_3(f_2(f_1(w)))\dots)))\) 的值,其中 \(f_i(w)\) 为第一个 \(\text{ppc}\) 操作之后的第 \(i\)\(\text{ppc}(x+b)\to x'\)

另外特殊处理一下没有 \(\text{ppc}\) 的情况即可。

代码实现

#include <bits/stdc++.h>
using namespace std;
using namespace obasic;
const int MaxN=3e5+5,MaxVb=51;
int N,M,A[MaxN],X,Y,Z;char Opt;
struct adat{int o;lolo d,b[MaxVb];};
adat addion(adat t,lolo x){if(t.o==0)t.d+=x;else for(int i=0;i<=50;i++)t.b[i]+=x;return t;
}
adat ppcion(adat t){if(t.o==0)for(int i=0;i<=50;i++)t.b[i]=i;else for(int i=0;i<=50;i++)t.b[i]=__builtin_popcountll(t.b[i]);t.o=1;return t;
}
adat merge(adat x,adat y){if(y.o==0)return addion(x,y.d);if(x.o==0){y.d+=x.d;return y;}for(int i=0;i<=50;i++)x.b[i]=y.b[__builtin_popcountll(x.b[i]+y.d)];return x;
}
struct SegTree{adat t[MaxN<<2];int cl[MaxN<<2],cr[MaxN<<2],cmid[MaxN<<2];int ls(int u){return u<<1;}int rs(int u){return (u<<1)|1;}void build(int u,int l,int r){cl[u]=l,cr[u]=r;if(l==r)return;int mid=(l+r)>>1;cmid[u]=mid;build(ls(u),l,mid),build(rs(u),mid+1,r);}void pushdown(int u){t[ls(u)]=merge(t[ls(u)],t[u]);t[rs(u)]=merge(t[rs(u)],t[u]);t[u].o=t[u].d=0;}void addupd(int u,int dl,int dr,int x){if(dl<=cl[u]&&cr[u]<=dr){t[u]=addion(t[u],x);return;}pushdown(u);if(dl<=cmid[u])addupd(ls(u),dl,dr,x);if(dr>cmid[u])addupd(rs(u),dl,dr,x);}void ppcupd(int u,int dl,int dr){if(dl<=cl[u]&&cr[u]<=dr){t[u]=ppcion(t[u]);return;}pushdown(u);if(dl<=cmid[u])ppcupd(ls(u),dl,dr);if(dr>cmid[u])ppcupd(rs(u),dl,dr);}adat query(int u,int dd){if(cl[u]==cr[u])return t[u];pushdown(u);return query(dd<=cmid[u]?ls(u):rs(u),dd);}
}SgT;
int main(){readis(N,M);SgT.build(1,1,N);for(int i=1;i<=N;i++)readi(A[i]);for(int i=1;i<=M;i++){scanf(" %c",&Opt);if(Opt=='A')readis(X,Y,Z),SgT.addupd(1,X,Y,Z);if(Opt=='P')readis(X,Y),SgT.ppcupd(1,X,Y);if(Opt=='J'){readi(X);adat res=SgT.query(1,X);if(res.o==0)writil(A[X]+res.d);else writil(res.b[__builtin_popcountll(A[X]+res.d)]);}}return 0;
}
http://www.jsqmd.com/news/19400/

相关文章:

  • 2025年10月中国婚姻家事与财富管理律师推荐榜:五强对比评测
  • 2025年包装机厂家权威推荐榜单:全自动包装机/包装生产线/非标定制机器与生产线专业选购指南
  • Timing Signoff 技术精要
  • Bugku-Web题目-sqli-0x1- HackINI 2021 - 指南
  • 02-GPIO-铁头山羊STM32标准库新版笔记
  • IDC iPaaS市场报告解读:独立厂商与云巨头的“双轨竞速”
  • 从0死磕全栈之Next.js 拦截路由(Intercepting Routes)详解:搭建模态框与上下文保持的利器
  • 科林电气与利驰软件续签合作,共启数字化协同新篇章!
  • 详细介绍:资产信息收集与指纹识别:HTTPX联动工具实战指南
  • 易基因:剑桥大学团队利用微量WGBS等揭示DNMT3L在胎盘发育中的DNA甲基化调控机制:CSC(IF20.5)
  • iOS 26 性能调试工具全景指南 多工具组合 + 实战流程
  • 102302134陈蔡裔数据采集第一次作业
  • 2025年10月蒸汽发生器品牌榜:辰能能源领衔五强对比
  • 2025吹塑机厂家权威推荐:鼎浩包装科技实力企业,专业定制高效生产方案
  • 01-准备-铁头山羊STM32标准库新版笔记
  • 17万+知识点英语维基百科数据集:205万行权威文本语料库驱动AI模型训练与智能系统开发
  • platformio上ESP32-s3,N16R8选择板子的解决方案
  • 2025年10月注册公司推荐:权威榜对比评测
  • 2025年10月工业洗地机厂家推荐:权威评测榜与全维度对比指南
  • YSP_refs_cn_2025
  • 2025年10月洗碗机品牌排名:海信稳居热销榜
  • NVIDIA HGX B200降低碳排强度的技术突破
  • 2025年10月上海装修公司评测榜:五强性价比与资质全对比
  • 2025年10月洗碗机品牌评测:海信领衔榜单
  • 2025年10月油烟机品牌排名:海信榜首五强横向榜
  • 2025年10月代理记账公司推荐:权威榜单对比全维度评测
  • 2025年10月油烟机品牌排名榜:海信携四强实测盘点
  • 详细介绍:探索少样本分类的深度:A Closer Look at Few-shot Classification
  • 2025年10月办公家具公司推荐:性价比榜五强评价报告
  • JS学习记录