LOJ-6278-数列分块入门2(分块)
链接:
题意:
给出一个长为 的数列,以及 个操作,操作涉及区间加法,询问区间内小于某个值 的元素个数。
思路:
分块,用vector维护每个区域的数值,每次通过二分去找满足的值.
每次单个修改时
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
//#include <memory.h>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#include <math.h>
#include <stack>
#include <string>
#include <assert.h>
#include <iomanip>
#define MINF 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int MAXN = 5e4+10;
int a[MAXN], Tag[MAXN];
int Rank[MAXN];
vector<int> Vec[MAXN];
int n, part;
void Re(int pos)
{
Vec[pos].clear();
for (int i = (pos-1)*part+1;i <= min(pos*part, n);i++)
Vec[pos].push_back(a[i]);
sort(Vec[pos].begin(), Vec[pos].end());
}
void Update(int l, int r, int c)
{
for (int i = l;i <= min(r, Rank[l]*part);i++)
a[i] += c;
Re(Rank[l]);
if (Rank[l] != Rank[r])
{
for (int i = (Rank[r]-1)*part+1;i <= r;i++)
a[i] += c;
Re(Rank[r]);
}
for (int i = Rank[l]+1;i <= Rank[r]-1;i++)
Tag[i] += c;
}
int Query(int l, int r, int v)
{
int cnt = 0;
for (int i = l;i <= min(r, Rank[l]*part);i++)
{
if (a[i] + Tag[Rank[i]] < v)
cnt++;
}
if (Rank[l] != Rank[r])
{
for (int i = max((Rank[r]-1)*part+1, l);i <= r;i++)
{
if (a[i]+Tag[Rank[i]] < v)
cnt++;
}
}
for (int i = Rank[l]+1;i <= Rank[r]-1;i++)
cnt += lower_bound(Vec[i].begin(), Vec[i].end(), v-Tag[i])-Vec[i].begin();
return cnt;
}
int main()
{
scanf("%d", &n);
part = sqrt(n);
for (int i = 1;i <= n;i++)
scanf("%d", &a[i]);
for (int i = 1;i <= n;i++)
{
Rank[i] = (i - 1) / part + 1;
Vec[Rank[i]].push_back(a[i]);
}
for (int i = 1;i <= Rank[n];i++)
sort(Vec[i].begin(), Vec[i].end());
int op, l, r, c;
for (int i = 1;i <= n;i++)
{
scanf("%d %d %d %d", &op, &l, &r, &c);
if (op == 0)
Update(l, r, c);
else
printf("%d\n", Query(l, r, c*c));
}
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用