尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

LG10516

LG10516
📅 发布时间:2026/6/17 23:54:48

虽然本题打着线段树的标签,但 \(10^5\) 的数据范围令我想到了简单粗暴的分块。

  • 操作 \(1\)

首先考虑暴力判断并修改每个位置的值,然而这样做会被卡到 \(O(nm)\)。但实际上,需要修改的位置可能不多,也就是会做大量的无用判断。这个时候,我们就可以充分利用分块的特性,记录每个块内 \(a_i \times b_i\) 的最小值,若该最小值比 \(k\) 大,则整个块都无需修改,直接跳过,否则暴力修改,并更新该块的信息。这样做效率得到了极大的提升,\(O(nm)\) 很难跑满。

注意,\(t=0\) 时并不会产生任何操作效果,因此直接忽略即可,运行效率可获得部分的提升。

  • 操作 \(2\)

分块的基础操作。直接定位所在的块,暴力修改并更新该块的信息。单次操作时间复杂度为 \(O(\sqrt n)\)。

  • 操作 \(3\)

也是分块的基础操作。利用先前已经维护好的信息,直接求和即可。单次操作时间复杂度为 \(O(\sqrt n)\)。

完整代码如下:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#define N 200001
#define int long longusing namespace std;int n,a[N],b[N],tot,x[N],y[N],mi[N],s[N],id[N],ans,len,l,r,k,t,op,lt,rt;inline int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;
}signed main()
{int T;cin >> n >> T;for( int i = 1 ; i <= n ; i ++ )a[i] = read();for( int i = 1 ; i <= n ; i ++ )b[i] = read();len = sqrt( n );l = 1;while( l <= n ){r = min( l + len - 1 , n );tot ++;x[tot] = l,y[tot] = r;mi[tot] = a[l] * b[l];id[l] = tot;s[tot] = a[l] + b[l];for( int i = l + 1 ; i <= r ; i ++ )mi[tot] = min( mi[tot] , a[i] * b[i] ),id[i] = tot,s[tot] += a[i] + b[i];l = r + 1;}while( T -- ){op = read();if( op == 1 ){l = read(),r = read(),k = read(),t = read();if( t == 0 ) continue;lt = id[l];rt = id[r];for( int i = lt ; i <= rt ; i ++ ){if( mi[i] > k ) continue; for( int j = max( x[i] , l ) ; j <= min( y[i] , r ) ; j ++ ){if( a[j] * b[j] <= k ){a[j] += t;b[j] += t;s[i] += t * 2;}}mi[i] = a[x[i]] * b[x[i]];for( int j = x[i] + 1 ; j <= y[i] ; j ++ )mi[i] = min( mi[i] , a[j] * b[j] );}}if( op == 2 ){k = read(),l = read(),r = read();s[id[k]] = s[id[k]] - a[k] + l - b[k] + r;;a[k] = l,b[k] = r;mi[id[k]] = a[x[id[k]]] * b[x[id[k]]];for( int i = x[id[k]] + 1 ; i <= y[id[k]] ; i ++ )mi[id[k]] = min( mi[id[k]] , a[i] * b[i] );}if( op == 3 ){l = read(),r = read();lt = id[l];rt = id[r];ans = 0;for( int i = lt ; i <= rt ; i ++ ){if( l <= x[i] && y[i] <= r ){ans += s[i];continue;}for( int j = max( x[i] , l ) ; j <= min( y[i] , r ) ; j ++ )ans += a[j] + b[j];}printf( "%lld\n" , ans );}}return 0;
}
我们会走到一起的。

相关新闻

  • Linux作业及状态转换
  • 设备驱动程序和设备独立性软件的区别
  • 树状数组板子

最新新闻

  • 避雷!重庆日语学习者挑选培训机构看资质存证 - 晚香时候
  • 上海汽车音响改装首选 | 音乐人生:20年专业积淀,上海音响改装标杆品牌 - 音乐人生汽车音响
  • 5.18冲刺
  • 2026吸水棒选型指南:代表性源头厂家解析 满足多场景合规需求 - 资讯纵览
  • 破解湘潭实木衣柜定制痛点:五真原木定制方法论如何实现健康高品质落地? - 资讯纵览
  • Zotero Actions Tags:智能自动化插件让文献管理效率提升300%

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号