洛谷题目链接:无聊的数列

题目背景

无聊的YYB总喜欢搞出一些正常人无法搞出的东西。有一天,无聊的YYB想出了一道无聊的题:无聊的数列。。。(K峰:这题不是傻X题吗)

题目描述

维护一个数列{a[i]},支持两种操作:

1、1 L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上。即:令a[L]=a[L]+K,a[L+1]=a[L+1]+K+D,

a[L+2]=a[L+2]+K+2D……a[R]=a[R]+K+(R-L)D。

2、2 P:询问序列的第P个数的值a[P]。

输入输出格式

输入格式:

第一行两个整数数n,m,表示数列长度和操作个数。

第二行n个整数,第i个数表示a[i](i=1,2,3…,n)。

接下来的m行,表示m个操作,有两种形式:

1 L R K D

2 P 字母意义见描述(L≤R)。

输出格式:

对于每个询问,输出答案,每个答案占一行。

输入输出样例

输入样例#1: 复制

5 2
1 2 3 4 5
1 2 4 1 2
2 3

输出样例#1: 复制

6

说明

数据规模:

0≤n,m≤100000

|a[i]|,|K|,|D|≤200

分析一下题意:给出一个长度为n的序列,m次操作,单点修改和区间修改,单点查询.

做法:

  • 差分记录修改
  • 线段树维护区间
  • 查询时输出修改的值加原值

下面贴一下代码:

#include<bits/stdc++.h>
#define ll(x) (x<<1)
#define rr(x) (x<<1|1)
using namespace std;
const int N=100000+5;int n, m, w[N];struct segment_tree{int l, r, sum, tag;
}t[N*4];int gi(){int ans = 0 , f = 1; char i = getchar();while(i<'0'||i>'9'){if(i=='-')f=-1;i=getchar();}while(i>='0'&&i<='9'){ans=ans*10+i-'0';i=getchar();}return ans * f;
}void up(int x){t[x].sum = t[ll(x)].sum+t[rr(x)].sum;
}void build(int node,int l,int r){t[node].l = l; t[node].r = r;if(l == r) return;int mid = (l+r>>1);build(ll(node),l,mid);build(rr(node),mid+1,r);up(node);
}void pushdown(int node){int ls = ll(node), rs = rr(node), tag = t[node].tag;int l = t[node].l, r = t[node].r , mid = (l+r>>1);t[ls].tag += tag; t[rs].tag += tag;t[ls].sum += tag*(mid-l+1); t[rs].sum += tag*(r-mid);t[node].tag = 0;
}void updata(int node,int l,int r,int val){if(l <= t[node].l && t[node].r <= r){t[node].tag += val;t[node].sum += val*(t[node].r-t[node].l+1);return;}if(t[node].tag) pushdown(node);int mid = (t[node].l+t[node].r>>1);if(l <= mid) updata(ll(node),l,r,val);if(mid < r) updata(rr(node),l,r,val);up(node);
}int query(int node,int l,int r){if(l <= t[node].l && t[node].r <= r) return t[node].sum;if(r < t[node].l || t[node].r < l) return 0;if(t[node].tag) pushdown(node);return query(ll(node),l,r)+query(rr(node),l,r);
}int main(){//freopen("data.in","r",stdin);int flag, l, r, k, d; n = gi(); m = gi();for(int i=1;i<=n;i++) w[i] = gi();build(1,1,n);while(m--){flag = gi(); l = gi();if(flag == 1){r = gi(); k = gi(); d = gi();updata(1,l+1,r,d); updata(1,l,l,k);if(r+1 <= n) updata(1,r+1,r+1,-d*(r-l)-k);//因为建树的时候没有建n+1的下标,所以特判防越界}else printf("%d\n",w[l]+query(1,1,l));}return 0;
}

转载于:https://www.cnblogs.com/BCOI/p/8867637.html

[洛谷P1438] 无聊的数列相关推荐

  1. 洛谷P1438 无聊的数列

    题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1.1 ...

  2. 洛谷 P1438 无聊的数列

    题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1.1 ...

  3. [luogu P1438] 无聊的数列

    [luogu P1438] 无聊的数列 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个 ...

  4. [洛谷P3228] [HNOI2013]数列

    洛谷题目链接:[HNOI2013]数列 题目描述 小T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察到: ...

  5. 洛谷P1182 数列分段Section II 二分答案

    洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值, ...

  6. 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)

    洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...

  7. 洛谷 P1356 数列的整除性

    [题目链接] 洛谷 P1356 数列的整除性 [题目考点] 1. 动态规划:线性动规 [解题思路] 本题与该题几乎是同一个问题: 信息学奥赛一本通 1195:判断整除 | OpenJudge 2.6 ...

  8. 信息学奥赛一本通 1937:【06NOIP普及组】数列 | 洛谷 P1062 [NOIP2006 普及组] 数列

    [题目链接] ybt 1937:[06NOIP普及组]数列 洛谷 P1062 [NOIP2006 普及组] 数列 [题目考点] 1. 数制 [解题思路] 如果k为2,那么这个数列 第1项为202^02 ...

  9. 二分答案——数列分段 Section II(洛谷 P1182)

    题目选自洛谷P1182 本题解法:二分答案+贪心 思路:首先,分析题目,求最大值的最小化,直接联想到二分,So我们直接二分答案,关键是要怎么去高效的check,我们考虑一个贪心的思路,能加的就加上,不 ...

最新文章

  1. 火狐浏览器书签(收藏夹)全部消失,历史记录也消失,如何恢复
  2. mysql bitmap redis_Redis中bitmap的妙用
  3. 在手机上实现实时的单目3D重建
  4. 路孚特:300天350个版本,旗舰移动产品“0”到“1”的交付之路
  5. virtualbox增强功能-VBoxGuestAdditions安装
  6. 使用VMware创建DOS虚拟机
  7. ubuntu上安装使用冰封王座
  8. 模式识别教材书选择填空期末汇总
  9. 计算机设备预计净残值,电子设备折旧年限及残值率
  10. revit二次开发--异形柱翻模
  11. 【学堂上新】大规模动画模拟的一种实现方法
  12. 拜读《高质量C/C++编程》笔记
  13. AirPlay视频SDK集成
  14. 【大数据】【人工智能】【 区块链】
  15. eclipse文档注释设置、文件(Files)注释标签、类型(Types)注释标签(类的注释)、字段(Fields)注释标签、构造函数(Constructor)标签
  16. 专治不会看源码的毛病--spring源码解析AOP篇(2017版)
  17. python中文相似度_python 人脸对比--百度API人脸相似度识别(超简单)-Go语言中文社区...
  18. 基于STM32红外计数的灯光照明
  19. 《西瓜书》吃瓜笔记1、2章
  20. Spark Kryo探索

热门文章

  1. 找呀志_ContentResolver操作ContentProvider数据
  2. 【php】用filter_var实现的简单参数验证
  3. GPL与LGPL的区别
  4. 有趣的insert死锁
  5. 分析 C# 2.0 新特性 -- 范型(Generics)
  6. datagrip中sqlite3导入csv数据集
  7. export TERM=xterm导致终端reset命令失效
  8. gensim在“中文查找(关键词)“与“txt文本“之间做相似度计算(返回最相似的文本)
  9. datatable删除一行数据
  10. Caused by: java.net.UnknownHostException: ubuntu: Name or service not known