简单数学变换+线段树

简单数据结构签到题不解释

本来应该贴板子的,鉴于最近写代码太少了,而且由于要用两个线段树,平时板子都是一个的。以及板子在队友那。就当熟悉写代码,自己写了一下。

#include <bits/stdc++.h>
using namespace std; #define dual(i, n) (n) + 1 - (i) typedef long long ll;
int n, q;
const int maxn = 1e+5 + 5;
typedef ll arr[maxn];
arr a, pa; struct seg_tree
{
// a,nds坐标都是从1开始记
ll *a;
int n;
struct nd
{
ll sum;
};
vector<nd> nds;
seg_tree(ll *a0, int n0)
{
a = a0;
n = n0;
nds.resize(4 * n);
build(1, 1, n);
}
void build(int i, int l, int r)
{
if (l == r)
{
nds[i].sum = a[l];
return;
}
int m = l + (r - l) / 2;
build(2 * i, l, m);
build(2 * i + 1, m + 1, r);
nds[i].sum = nds[2 * i].sum + nds[2 * i + 1].sum;
} void change(int i, ll x)
{
ll delta = x - a[i];
a[i] = x;
add(i, delta);
} void add(int i, ll x)
{
int l = 1;
int r = n;
int u = 1;
int m;
while (true)
{
nds[u].sum += x;
if (l == r)
break;
m = l + (r - l) / 2;
if (i <= m)
{
r = m;
u = 2 * u;
}
else
{
l = m + 1;
u = 2 * u + 1;
}
}
} ll query(int l, int r, int u, int ul, int ur)
{
// ensure ul<=l<=r<=ur
if (ul == l && r == ur)
return nds[u].sum;
int um = ul + (ur - ul) / 2;
if (r <= um) // left
return query(l, r, 2 * u, ul, um);
else if (l >= um + 1) // right
return query(l, r, 2 * u + 1, um + 1, ur);
else
return query(l, um, 2 * u, ul, um) // left
+ query(um + 1, r, 2 * u + 1, um + 1, ur); // right
} inline ll query(int l,int r) {
return query(l,r,1,1,n);
}
}; int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> q;
for (int i = n; i >= 1; --i)
{
cin >> a[i];
pa[i] = a[i] * i;
}
seg_tree s(a, n);
seg_tree ps(pa, n);
int t, l, r, k;
ll x, px;
for (int i = 0; i < q; ++i)
{
cin >> t;
if (1 == t)
{
// query
cin >> r >> l;
l = dual(l, n);
r = dual(r, n);
cout << ps.query(l, r) - (ll)(l - 1) * s.query(l, r) << "\n";
}
else
{
// a[k] = x
cin >> k >> x;
k = dual(k, n);
px = x * k;
s.change(k, x);
ps.change(k, px);
}
}
cout.flush();
return 0;
}

ACM-ICPC 2018 徐州赛区网络预赛 Ryuji doesn't want to study的更多相关文章

  1. ACM-ICPC 2018 徐州赛区网络预赛 HRyuji doesn't want to study 树状数组

    题目链接:https://nanti.jisuanke.com/t/A2007 题目大意:有一个序列含有n个数a[1],a[2],a[3],……a[n],有两种操作: 第一种操作:k=1,l,r,询问 ...

  2. 计蒜客 1460.Ryuji doesn't want to study-树状数组 or 线段树 (ACM-ICPC 2018 徐州赛区网络预赛 H)

    H.Ryuji doesn't want to study 27.34% 1000ms 262144K   Ryuji is not a good student, and he doesn't wa ...

  3. ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study

    262144K   Ryuji is not a good student, and he doesn't want to study. But there are n books he should ...

  4. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)

    ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...

  5. ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer (最大生成树+LCA求节点距离)

    ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer J. Maze Designer After the long vacation, the maze designer ...

  6. ACM-ICPC 2018 徐州赛区网络预赛(8/11)

    ACM-ICPC 2018 徐州赛区网络预赛 A.Hard to prepare 枚举第一个选的,接下来的那个不能取前一个的取反 \(DP[i][0]\)表示选和第一个相同的 \(DP[i][1]\) ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 B(dp || 博弈(未完成)

    传送门 题面: In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl n ...

  8. ACM-ICPC 2018 徐州赛区网络预赛 B. BE, GE or NE

    In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl named &qu ...

  9. ACM-ICPC 2018 徐州赛区网络预赛 F. Features Track

    262144K   Morgana is learning computer vision, and he likes cats, too. One day he wants to find the ...

随机推荐

  1. mongoDB常用命令与安全加固

    一.介绍 MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...

  2. 修改kali软件源并配置网络

    一.配置kali使用xshell连接 查看ssh服务状态 # service ssh status 开启ssh服务 # service ssh start 修改ssh配置文件 # vi /etc/ss ...

  3. 使用Python批量更新服务器文件【新手必学】

    买了个Linux服务器,Centos系统,装了个宝塔搭建了10个网站,比如有时候要在某个文件上加点代码,就要依次去10个文件改动,虽然宝塔是可视化页面操作,不需要用命令,但是也麻烦,虽然还有git的h ...

  4. Netty——知识点总结

    引言 Netty blablabla…… Netty 知识点

  5. Python requests 调Jenkins登录接口,返回404,但请求地址、请求头、消息主题和抓包的内容都一样

    #coding=utf-8import requests url = "http://localhost:8080/jenkins/j_acegi_security_check"h ...

  6. MySQL之ERROR 1558 (HY000): Column count of mysql.user is wrong.解决方案

    一.场景 我本想在MySQL5.7上执行下列语句创建一个新用户: CREATE USER "remote"@"%" IDENTIFIED BY "12 ...

  7. linux设置服务器时间

    在 Linux 机器上有两种时钟: 由内核维持的软件时钟(又称系统时钟)和在机器关机后记录时间的(电池供电的)硬件时钟. 启动的时候, 内核会把系统时钟与硬件时钟同步. 之后, 两个时钟各自独立运行. ...

  8. Linux 简介、目录结构

    Linux是类 Unix 操作系统. 根据原生程度可分为: 内核版本 发行版本:一些公司.组织在内核版的基础上进行二次开发 根据市场需求可分为: 服务器版:没有好看的界面,在终端操作,类似于dos 桌 ...

  9. xPath和html基础扫盲

    xPath:一种HTML和XML的查询语言,他能在XML和HTML的树状结构中寻找节点 安装xPath: pip方法: pip install  lxml win+R:cmd 打开命令控制台:   此 ...

  10. Java连载88-HashSet集合与hashCode方法重写

    一.Set集合 1.HashSet底层实际上是一个HashMap,HashMap底层采用了哈希表数据结构. 2.哈希表又称为散列表,哈希表底层是一个数组,这个数组中每一个元素是一个单向链表,每个单向链 ...