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

P11398 众数

维护前缀众数,考虑分块。维护前 \(i\) 个块中每种数的出现次数与众数,单点加只会影响后面的块,\(O(\sqrt n)\)。看到这个 \(k\) 的范围基本就确定是直接从后向前找,从后往前枚举块,有了出现次数前缀和容易通过扫一遍块得到其中所有位置的权值,最坏应该是 \(O(m\sqrt n+\sum k)\)

但是因为需要维护前缀和数组,是 \(O(n\sqrt n)\) 的。为了空间只能牺牲时间,大抵是卡不过去的。

因为 \(k\) 是从后向前扫的,也不用考虑散块修改。考虑倍增分块,从后向前 \(1,2,4,8,\cdots\) 分一块。则修改只有 \(\log n\) 个块,前缀和数组大小也是 \(O(n\log n)\) 的。找 \(k\) 时最多枚举两倍的位置,总复杂度 \(O(m\log n+\sum k)\)

Takanashi Rikka
// Problem: P11398 众数
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P11398
// Memory Limit: 512 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<bits/stdc++.h>
using namespace std;
#define fin(x) freopen(#x".in","r",stdin)
#define fout(x) freopen(#x".out","w",stdout)
#define fr(x) fin(x),fout(x);
#define Fr(x,y) fin(x),fout(y)
#define INPUT(_1,_2,FILE,...) FILE
#define IO(...) INPUT(__VA_ARGS__,Fr,fr)(__VA_ARGS__)
#define pb push_back
#define ll long long
#define pii pair<int,int>
#define mp make_pair
#define intz(x,z) memset((x),(z),sizeof((x)))
#define cfast ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
inline ll lowbit(ll x){return x&-x;}
#define fi first
#define se second
inline void cmx(auto &x,ll y){if(y>x)x=y;}
inline void cmn(auto &x,ll y){if(y<x)x=y;}
const int N=3e5+5,B=55;
int b[N],bl[N],p[B],L[N],R[N];ll val[N],a[N],sum[B][N],c[N];
void UesugiErii(){int id,n,m;cin>>id>>n>>m;for(int i=1;i<=n;i++)cin>>a[i]>>b[i];int tot=1;for(int i=n,tmp=1;i>0;i--){for(int j=i;j>max(0,i-tmp);j--)bl[j]=tot;i-=tmp-1,tmp*=2,++tot;}for(int i=1;i<=n;i++){R[bl[i]=tot-bl[i]+1]=i;if(!L[bl[i]])L[bl[i]]=i;}for(int i=1;i<=bl[n];i++){for(int j=1;j<=n;j++)sum[i][j]+=sum[i-1][j];for(int j=L[i];j<=R[i];j++)sum[i][b[j]]+=a[j];int mx=0;for(int j=1;j<=n;j++)if(sum[i][j]>=mx)mx=sum[i][j],p[i]=j;}while(m--){int op;ll x,y;cin>>op>>x;if(op==1){cin>>y,a[x]+=y;for(int j=bl[x];j<=bl[n];j++){sum[j][b[x]]+=y;if((sum[j][b[x]]>sum[j][p[j]])||(sum[j][b[x]]==sum[j][p[j]]&&b[x]>=p[j]))p[j]=b[x];}}else{ll v=0;bool flag=0;for(int i=bl[n];i&&!flag;i--){int P=p[i-1];for(int j=L[i];j<=R[i];j++){c[b[j]]+=a[j];if((sum[i-1][b[j]]+c[b[j]]>sum[i-1][P]+c[P])||(sum[i-1][b[j]]+c[b[j]]==sum[i-1][P]+c[P]&&b[j]>=P))P=b[j];val[j]=1ll*P*a[j];}for(int j=R[i];j>=L[i];j--)if((v^=val[j])==x){cout<<n-j+1<<'\n';flag=1;break;}for(int j=L[i];j<=R[i];j++)c[b[j]]=0;}}}
}
signed main(){cfast;int _=1;//cin>>_;for(;_;_--)UesugiErii();return 0;
}
http://www.jsqmd.com/news/130517/

相关文章:

  • 探索Maxwell外转子电机设计与电磁仿真
  • 【必学收藏】一文掌握RAG分块新范式:Max-Min语义分块技术深度解析
  • Kafka 与 Spark 在大数据实时分析中的集成
  • SMT贴片加工生产车间主要设备有哪些
  • SGMICRO圣邦微 SGM2034-5.0YN3G/TR SOT23 线性稳压器(LDO)
  • Jmeter 性能-需求分析业务/场景设计
  • JavaScript 性能优化:7 个 V8 引擎偏爱的编码模式让你提速 40%
  • 一篇了解自动化测试
  • mongodb备份的脚本
  • 软件测试:如何进行微服务测试?
  • 必看!青年拔尖人才支持计划项目优化申报策略与重要注意事项
  • SGMICRO圣邦微 SGM2036-1.1YN5G/TR SOT23-5 线性稳压器(LDO)
  • HarmonyOS 5开发从入门到精通(十一):设备能力调用
  • 基于51单片机的智能遥控晾衣架
  • NVIDIA显卡疑难杂症:全面诊断与修复指南
  • 【必藏】从RAG到Agent的坑,看懂本体工程如何成为LLM时代的真正胜负手
  • 银行私域运营案例:如何用企业微信+AI实现200%增长?
  • 毕设成品 stm32 RFID智能仓库管理系统(源码+硬件+论文)
  • 基于Springboot的社区共享充电宝租赁管理系统
  • K6 性能测试教程:常用功能 - HTTP 请求,指标和检查
  • 基于单片机控制的无线烟雾检测报警系统
  • AI Agent开发必看!LangGraph vs 低代码平台:从“拖拽幻象“到“代码真香“,小白也能构建生产级智能系统[特殊字符]
  • AI 建站是否支持 SEO 优化?运维与后期优化的实务指南
  • 2025年矿山煤矿电力电缆生产厂家推荐top 榜:中压、低压、聚乙烯绝缘电缆推荐(12月更新) - 品牌2026
  • 如何调试SIEMENS 7ME6910-1AA30-1AA0变送器
  • 【AI Agent开发书籍】《智能体设计模式:构建智能系统的实践指南》(全文)
  • 俄罗斯发动大规模空袭,袭击引发多处火灾!
  • 从0到1部署Tomcat和添加servlet(IDEA2024最新版详细教程) - 详解
  • 接口测试与常用接口测试工具总结
  • 基于51单片机的智能小车转向控制系统设计与实现