首页 > 其他分享 >无聊的数列

无聊的数列

时间:2024-10-16 21:58:58浏览次数:2  
标签:return 数列 无聊 mid long cin build change

  • 通过这道题,了解了标记永久化的思想,也加深了对线段树的理解~
  • 另外,这道题也是可以将原数组转化成差分数组做
点击查看代码
#include <bits/stdc++.h>
using namespace std;
long long a[100005];
struct t1
{
	long long l,r;
	long long k,d;
}t[400005];
void build(long long p,long long l,long long r)
{
	t[p].l=l;
	t[p].r=r;
	t[p].k=t[p].d=0;
	if(l==r)
	{
		t[p].k=a[l];
		return;
	}
	long long mid=(l+r)>>1;
	build(p*2,l,mid);
	build(p*2+1,mid+1,r);
}
void change(long long p,long long l,long long r,long long k,long long d)
{
	if(l<=t[p].l&&r>=t[p].r)
	{
		t[p].k+=(k+(t[p].l-l)*d);
		t[p].d+=d;
		return;
	}
	long long mid=(t[p].l+t[p].r)>>1;
	if(l<=mid)
	{
		change(p*2,l,r,k,d);
	}
	if(r>mid)
	{
		change(p*2+1,l,r,k,d);
	}
}
long long ask(long long p,long long x)
{
	if(t[p].l==t[p].r)
	{
		return t[p].k;
	}
	long long mid=(t[p].l+t[p].r)>>1;
	long long va=t[p].k+(x-t[p].l)*t[p].d;
	if(x<=mid)
	{
		va+=ask(p*2,x);
	}
	else
	{
		va+=ask(p*2+1,x);
	}
	return va;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	long long n,m;
	cin>>n>>m;
	for(long long i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	build(1,1,n);
	for(long long i=1;i<=m;i++)
	{
		long long opt;
		cin>>opt;
		if(opt==1)
		{
			long long l,r,k,d;
			cin>>l>>r>>k>>d;
			change(1,l,r,k,d);
		}
		else
		{
			long long p;
			cin>>p;
			cout<<ask(1,p)<<"\n";
		}
	}
	return 0;
}

标签:return,数列,无聊,mid,long,cin,build,change
From: https://www.cnblogs.com/watersail/p/18471034

相关文章

  • 洛谷 P5175 数列 题解
    纯纯数学题。看到\(n\le10^{18}\)不难想到矩乘,但是\(\log_210^{18}\approx60\),再加上\(T=30000\)的多测,运算量已经来到了\(1.8\times10^6\),所以我们最多有一个\(\sqrt[3]{\frac{1.5\times10^8}{6\times10^6}}\approx4\)的矩阵。\[\becausea_i=xa_{i-1}+ya_{......
  • 【算法】动态规划:从斐波那契数列到背包问题
    【算法】动态规划:从斐波那契数列到背包问题文章目录【算法】动态规划:从斐波那契数列到背包问题1.斐波那契数列2.爬楼梯3.零钱转换Python代码4.零钱兑换II5.组合数dp和排列数dp6.为什么动态规划的核心思想计算组合数的正确方法代码实现为什么先遍历硬币再遍历金额可以......
  • [题目记录]一本通高手训练-数列
    题意定义n-数列为满足以下条件的数列\({a_i}\):数列长度不小于\(3\),且每个元素为\(1\)到\(n\)的整数.对于任意\(k\ge3\),有$(a_k-a_{k-2})(a_{k-1}-a_{k-2})<0$.给出\(n\),求n-数列的个数,对\(10^9+7\)取模.\(n\le10^{500000}\)时空限制......
  • LOJ 数列分块入门2
    算法考虑求小于给定值的数的个数,可以给每个块再维护一个已经排好序的数组,整块加法对于这个块排好序的数组没有影响,零散块加法直接在原序列上加,再将零散块所处的整块从新排序。查询时零散块暴力查找,整块二分查找代码#include<bits/stdc++.h>#defineintlonglongconstintM......
  • 无聊时整一个仿qq版用户注册
    springboot+mybatisplus开始展示相信很多小伙伴在写注册用户时应该都是传统的账号加密码进行用户注册此时为什么不动动自己聪明的小脑袋瓜写一个另类的注册功能呢我们常用的qq这种注册方法到现在也是很新颖的,这是我们就应该想到他这个账号是如何形成的。qq注册就是输入用......
  • 洛谷P2513 逆序对数列
    Problem给定n,k,求得1~n中有多少种排列使得逆序对个数为k?(n,k<=1000)Solve考虑DP:设f[i][j]为i个数中逆序对数量为j的排列数量但因为我们并不知道我们这i个数到底是谁,难以通过以前的状态得到设f[i][j]为将i放入之前的排列后,逆序对数量为k的排列数此时我们发现可以确定前i-1......
  • 数列 题解
    题意给出一张联通图,图上每个点有红蓝两色,给每一条边都赋一个权值,使得所有的红边构成一颗最小生成树,且权值是\(1\)到\(m\)的排列,求字典序最小的情况。题解对于一条蓝边,其权值一定小于除它以外全是红边的环上的所有红边的权值(有点绕),否则就构不成一颗生成树。所以只需要按顺......
  • 信息学奥赛复赛复习11-CSP-J2020-04方格取数-动态规划、斐波那契数列、最优子结构、重
    PDF文档公众号回复关键字:202410041P7074[CSP-J2020]方格取数[题目描述]设有n×m的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上角走到右下角,每一步只能向上、向下或向右走一格,并且不能重复经过已经走过的方格,也不能走出边界。小熊会取走所有经过的方格中......
  • 【递归】小q的数列
    https://ac.nowcoder.com/acm/contest/21763/1002pow(2,ans)计算的是2的ans次幂,但是pow()函数返回的是double类型的结果。由于pow()函数主要用于浮点数计算,它返回浮点数结果,而后你可能需要对该结果进行整数操作。如果不进行显式类型转换,这个浮点数结果会丢失精度,特别是在......
  • 南沙csp-j/s一对一家教 解一本通题: 1937:【06NOIP普及组】数列
    ​【题目描述】给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:1,3,4,9,10,12,13,…请你求出这个序列的第N项的值(用10进制数表示)。例如,对于k=3,N=100,正确答案应该是981。【输入】只有1行,为2个正整数,用一个......