LOJ #6277 数列分块1题解 && 2023年最后一篇题解

Part #0 . 前言 \text{Part \#0 . 前言} Part #0 . 前言

分块是一种优雅的暴力。


Part #1 . 数列分块入门1 \text{Part \#1 . 数列分块入门1} Part #1 . 数列分块入门1

传送门

这题是一个基础的分块,块外的暴力,块内做标记,块长 n \sqrt{n} n ,块数 n \sqrt{n} n ,注意查询的时候要加上标记。

cpp 复制代码
/*
1. sqrt(m*2/3)
*/
#include <bits/stdc++.h>

using namespace std;

#define int long long
#define fi first
#define se second
#define rg register
#define il inline
#define forz(i,a,b) for(register int i((a));i<=(b);++i)
#define forn(i,a,b) for(register int i((a));i>=(b);--i)
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)

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<<3)+(x<<1)+ch-'0';ch=getchar();}
	return x*f;
}

inline void write(int x)
{
    if(x<0){putchar('-');x=-x;}
    if(x>9) write(x/10);
    putchar(x%10+'0');
}

const int maxn=5e4+100;
const int mod=993244853;
const int inf=9e18;

int a[maxn];
int fk[maxn];
int st[maxn],ed[maxn],lenn[maxn];
int block[maxn];
int num,len;

inline void init(int n)
{
	len=sqrt(2*n/3);
	num=n%len?n/len+1:n/len;
	forz(i,1,num)
	{
		st[i]=(i-1)*len+1;
		ed[i]=min(n,i*len);
		lenn[i]=ed[i]-st[i]+1;
	}
	forz(i,1,num) forz(j,st[i],ed[i]) block[j]=i;
}

inline void solve()
{
	int n=read();
	forz(i,1,n) a[i]=read();
	init(n);
	while (n--)
	{
		int op=read(),l=read(),r=read(),c=read();
		if(!op)
		{
			if(block[l]==block[r]) forz(i,l,r) a[i]+=c;
			else
			{
				forz(i,l,ed[block[l]]) a[i]+=c;
				forz(i,block[l]+1,block[r]-1) fk[i]+=c;
				forz(i,st[block[r]],r) a[i]+=c;
			}
		}
		else
		{
			write(a[r]+fk[block[r]]);
			putchar('\n');
		}
	}
	putchar('\n');
}

signed main()
{
//    IOS;
	int _=1;
	while (_--) solve();
	return 0;
}

明天就是2024年了,祝大家在2024年一帆风顺,前途似锦,期末取得佳绩。

相关推荐
精明的身影9 分钟前
C++自学之路1:Hello world
开发语言·c++
旖-旎26 分钟前
《LeetCode 64 最小路径和 || LeetCode 174 地下城游戏》
c++·算法·leetcode·动态规划
森林古猿140 分钟前
再论斜率优化
c++·学习·算法
万法若空1 小时前
【数学-简单数论】同余中的逆
线性代数·算法
水利行业RTU手艺人1 小时前
RTU固件中的“数据保险箱”——离线数据补发系统设计
c++·stm32·单片机·物联网
凯瑟琳.奥古斯特2 小时前
力扣1009补码解法C++实现
开发语言·c++·算法·leetcode·职场和发展
KaMeidebaby2 小时前
卡梅德生物技术快报|蛋白的叠氮基修饰:实操解析:核酸模板耦合蛋白的叠氮基修饰实现靶蛋白定点共价标记
前端·人工智能·物联网·算法·百度
十月的皮皮3 小时前
C语言学习笔记20260706-栈的压入、弹出序列验证
c语言·笔记·学习
通信仿真爱好者3 小时前
第【60期】--大规模MIMO系统信号检测算法误码率比较 --matlab完整代码+参考文章
算法·matlab·mimo·信号检测
AI科技星3 小时前
全域谱分析:无穷维超复数信息场分形统一场论——自然、量子、金融多重分形第一性原理完整体系(中英双语终稿)
人工智能·python·算法·金融·乖乖数学·全域数学