hiho #1078 : 线段树的区间修改
题意:长度为n的序列上有两种操作
0 ql qr 输出区间[ql,qr]和
1 ql qr v 区间[ql,qr]赋值为v
线段树懒标基础题,我用分块写了一个,在本题数据竟然跑的飞快
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include<iostream> #include<cstdio> #include<cmath> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; const int maxn=1e5+5; typedef long long ll; int val[maxn],belong[maxn],l[maxn],r[maxn],inv[maxn]; ll ans[maxn]; int n,q,op,ql,qr,v,cnt,block; void update( int L, int R, int bt){ if (L==l[bt]&&R==r[bt]){ inv[bt]=v;ans[bt]=(ll)v*(R-L+1); return ; } if (inv[bt]){ rep(i,l[bt],L-1)val[i]=inv[bt]; rep(i,R+1,r[bt])val[i]=inv[bt]; rep(i,L,R)ans[bt]+=v-inv[bt],val[i]=v; inv[bt]=0; return ; } rep(i,L,R)ans[bt]+=v-val[i],val[i]=v; } void update(){ int b1=belong[ql],b2=belong[qr]; if (b1==b2)update(ql,qr,b1); else { update(ql,r[b1],b1);b1++; while (b1<b2) update(l[b1],r[b1],b1),b1++; update(l[b2],qr,b2); } } ll query( int L, int R, int bt){ if (l[bt]==L&&r[bt]==R) return ans[bt]; if (inv[bt]) return (ll)inv[bt]*(R-L+1); ll res=0; rep(i,L,R)res+=val[i]; return res; } ll query(){ ll res=0; int b1=belong[ql],b2=belong[qr]; if (b1==b2) return query(ql,qr,b1); res+=query(ql,r[b1],b1);b1++; while (b1<b2)res+=ans[b1++]; res+=query(l[b2],qr,b2); return res; } void init(){ block= sqrt (n);cnt=n/block; rep(i,0,n-1){ belong[i]=i/block; ans[belong[i]]+=val[i]; } rep(i,0,cnt-1)l[i]=i*block,r[i]=(i+1)*block-1; if (n%block){ l[cnt]=cnt*block,r[cnt]=n-1;cnt++; } } int main(){ scanf ( "%d" ,&n); rep(i,0,n-1) scanf ( "%d" ,val+i); init(); scanf ( "%d" ,&q); while (q--){ scanf ( "%d%d%d" ,&op,&ql,&qr); ql--;qr--; if (op){ scanf ( "%d" ,&v); update(); } else printf ( "%lld\n" ,query()); } return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)