K - Krystalova‘s Trivial Problem (lazytag线段树)
需要一个带有lazytag的线段树,维护一下区间和,和区间平方和。对于每一次加x的操作,假设原区间平方和是 ,对于加完x后的操作后, 原序列变为
拆开后合并同类项,我们可以根据最后一个式子来区间维护这个区间平方和。
ACcode
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N = 1e6 + 250;
const int mod = 1e9 + 7;
int a[N];
int n, m;
struct node
{int l, r;int lz;int sum;int v;
} t[N * 4];
void pushup(int p)
{t[p].sum = (t[p << 1].sum % mod + t[p << 1 | 1].sum % mod) % mod;t[p].v = (t[p << 1].v % mod + t[p << 1 | 1].v % mod) % mod;
}void pushdown(int p)
{if (t[p].lz != 0){int tt = t[p].lz%mod;t[p << 1].lz = (t[p << 1].lz + t[p].lz) % mod;t[p << 1 | 1].lz = (t[p << 1 | 1].lz + t[p].lz) % mod;t[p << 1].v = (t[p << 1].v % mod + 2ll * tt % mod * t[p << 1].sum % mod + (t[p << 1].r - t[p << 1].l + 1ll) * tt % mod * tt % mod+mod) % mod;t[p << 1 | 1].v = (t[p << 1 | 1].v % mod + 2ll * tt % mod * t[p << 1 | 1].sum % mod + (t[p << 1 | 1].r - t[p << 1 | 1].l + 1) * tt % mod * tt % mod+mod) % mod;t[p << 1].sum = (t[p << 1].sum % mod + tt * (t[p << 1].r - t[p << 1].l + 1) % mod+mod) % mod;t[p << 1 | 1].sum = (t[p << 1 | 1].sum % mod + tt * (t[p << 1 | 1].r - t[p << 1 | 1].l + 1ll) % mod+mod) % mod;t[p].lz = 0;}
}void build(int p, int l, int r)
{t[p] = {l, r, 0, 0, 0};if (l == r){t[p].sum = a[l] % mod;t[p].v = a[l] * a[l] % mod;return;}int mid = l + r >> 1;build(p << 1, l, mid);build(p << 1 | 1, mid + 1, r);pushup(p);
}void modify(int p, int l, int r, int x)
{if (t[p].l >= l && t[p].r <= r){t[p].v = (t[p].v % mod + 2ll * x * t[p].sum % mod + (t[p].r - t[p].l + 1ll) * x % mod * x % mod) % mod;t[p].sum = (t[p].sum % mod + (t[p].r - t[p].l + 1ll) * x % mod) % mod;t[p].lz = (t[p].lz % mod + x % mod) % mod;return;}pushdown(p);if (t[p << 1].r >= l)modify(p << 1, l, r, x);if (t[p << 1 | 1].l <= r)modify(p << 1 | 1, l, r, x);pushup(p);
}
int query(int p, int l, int r)
{if (t[p].l >= l && t[p].r <= r){return t[p].v % mod;}pushdown(p);int res = 0;if (t[p << 1].r >= l)res = (res % mod + query(p << 1, l, r) % mod+mod) % mod;if (t[p << 1 | 1].l <= r)res = (res % mod + query(p << 1 | 1, l, r) % mod+mod) % mod;pushup(p);return res % mod;
}void solve()
{cin >> n >> m;for (int i = 1; i <= n; i++){cin >> a[i];a[i] % mod;}build(1, 1, n);while (m--){char op[10];cin >> op;if (op[0] == 'u'){int l, r, x;cin >> l >> r >> x;modify(1, l, r, x);}else{int l, r;cin >> l >> r;cout << (query(1, l, r)%mod+mod)%mod << endl;}}
}signed main(void)
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);solve();return 0;
}
K - Krystalova‘s Trivial Problem (lazytag线段树)相关推荐
- 2022 ICPC Gran Premio de Mexico 2da Fecha Final standings - K. Krystalova‘s Trivial Problem
K. Krystalova's Trivial Problem time limit per test1 second memory limit per test256 megabytes input ...
- 切题 (problem)(线段树+最大流最小割)
切题 problem description solution code description 在一个神秘的 JOSLFN 上,wzy 和 lqs2015 常年占据着切题榜的 rk1 和 rk2.现 ...
- CF903G-Yet Another Maxflow Problem【线段树,最大流】
正题 题目链接:https://www.luogu.com.cn/problem/CF903G 题目大意 有nnn个AAA点,nnn个BBB点,第Ai→Ai+1A_i\rightarrow A_{i+ ...
- 【XSY2720】区间第k小 整体二分 可持久化线段树
题目描述 给你你个序列,每次求区间第\(k\)小的数. 本题中,如果一个数在询问区间中出现了超过\(w\)次,那么就把这个数视为\(n\). 强制在线. \(n\leq 100000,a_i<n ...
- 【BZOJ3110】【codevs1616】K大数查询,权值线段树套普通线段树
Time:2016.05.09 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: 之前没怎么接触过权值线段树(非主席树),这次就当学习了一下吧.一开始还把题意理解错了,我的 ...
- 吉首大学校赛 K 白山茶与红玫瑰 (线段树区间操作)
链接:https://ac.nowcoder.com/acm/contest/925/K 来源:牛客网 题目描述 公元2019年6月22日,白山茶王国与红玫瑰王国展开大战,在世外仙境--天空花园处,双 ...
- 【HDU - 5475】An easy problem(线段树,思维)
题干: One day, a useless calculator was being built by Kuros. Let's assume that number X is showed on ...
- B - Bin Packing Problem (线段树+multiset)
第一个算法用线段树来进行快速查询第一个可以装下item的bin 第二个算法用multiset的二分快速找到能装下item的最小的bin(也就是lower_bound()) 线段树可以对无序的序列实现快 ...
- 第K小数-可持续优化结构线段树-主席树
给定长度为N的整数序列A,下标为 1∼N1∼N. 现在要执行M次操作,其中第i次操作为给出三个整数li,ri,kili,ri,ki,求A[lili],A[lili+1],-,A[ri]ri中第kiki ...
最新文章
- Ali RocketMQ与Kafka对照
- 【Manning新书】可解释人工智能: 构建可解释机器学习系统
- ajax is failed怎么办,我在AJAX中遇到了问题
- Linux-Ubuntu Server 16.04安装JDK以及配置JDK环境变量
- (原创)VS2017 C# 运行 Javasrcipt RSA 加密用户名登录 Java开发的服务器
- 备份恢复:如何让xtrabackup恢复速度提升20倍?
- python做简单温度转华氏_python温度转换华氏温度实现代码
- 电子通讯录(文件保存版)
- 使用esp32 作为蓝牙鼠标和键盘以及坑
- Python 已知三角形三边求三角形面积
- 随笔(面试相关)(杂)
- Tomcat8安装后tomcat8w.exe点击出现“指定的服务未安装”解决方案
- 树莓派初体验usb摄像头
- 网站流量UV是什么意思?什么是流量UV?
- 我的世界整合包内自带服务器,我的世界服务器整合包怎么用
- 总结下自己的入门学黑之路
- Lip Reading Sentences in the Wild(2017)
- 精妙SQL语句(转载)
- 高等数学_第一类第二类曲线积分(基本)
- echarts默认不显示部分折线,鼠标移动点击显示