A题 楼兰图腾

链接:https://ac.nowcoder.com/acm/contest/1032/A

树状数组 + 逆序对

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) (x & -x)
typedef long long ll;
const int maxn = 2e5 + 10;
int a[maxn], c[maxn], l[maxn], r[maxn], n;
void update(int p, int val) {
while (p <= n) {
c[p] += val;
p += lowbit(p);
}
} int ask(int x) {
int res = 0;
while (x > 0) {
res += c[x];
x -= lowbit(x);
}
return res;
} int main() {
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
//求正序,前面有几个比a[i]大
for (int i = 1; i <= n; i++) {
update(a[i], 1);
l[i] = ask(a[i] - 1);
}
memset(c, 0, sizeof c);
//树状数组清零求逆序,后面有几个比a[i]大
for (int i = n; i >= 1; i--) {
update(a[i], 1);
r[i] = ask(a[i] - 1);
}
ll ans = 0;
//依次枚举每个点作为中间点,以该点位中心的 ‘v’ 个数显然是 left[i] * right[i]
for (int i = 2; i <= n - 1; i++) {
ans += 1ll * (i - l[i] - 1) * (n - i - r[i]);
}
cout << ans << " ";
ans = 0;
//同理枚举 '^'的个数
for (int i = 2; i <= n - 1; i++) {
ans += 1ll * l[i] * r[i];
}
cout << ans << endl;
return 0;
}

B题 A Tiny Problem with intergers

链接:https://ac.nowcoder.com/acm/contest/1032/B

树状数组 区间修改 + 单点查询

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) (x & -x)
typedef long long ll;
const int maxn = 1e5 + 10;
int tr[maxn], n, q, a, pre;
void add(int i, int v) {
while (i <= n) {
tr[i] += v;
i += lowbit(i);
}
}
int getsum(int x) {
int res = 0;
while (x) {
res += tr[x];
x -= lowbit(x);
}
return res;
}
int main() {
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0);
cin >> n >> q;
for (int i = 1; i <= n; ++i)cin >> a, add(i, a - pre), pre = a;
char c; int u, v, a;
while (q--) {
cin >> c >> u;
if (c == 'C') {
cin >> v >> a; add(u, a), add(v + 1, - a);
}
else
cout << getsum(u) << endl;
}
}

C题 A Simple Problem with Integers

链接:https://ac.nowcoder.com/acm/contest/1032/C

树状数组 区间修改 + 区间查询 / (线段树 or 分块)

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) (x & -x)
typedef long long ll;
const int maxn = 1e5 + 10;
ll n, q, tr1[maxn], tr2[maxn], a, pre;
void add(int x, int v) {
for (int i = x; i <= n; i += lowbit(i)) tr1[i] += v, tr2[i] += 1ll * v * (x - 1);
}
ll getsum(int x) {
long long sum = 0;
for (int i = x; i; i -= lowbit(i)) sum += tr1[i] * x - tr2[i];
return sum;
}
int main() {
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0);
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a, add(i, a - pre), pre = a;
char c; int u, v, a;
while (q--) {
cin >> c >> u >> v;
if (c == 'C') {
cin >> a; add(u, a), add(v + 1, - a);
}
else
cout << getsum(v) - getsum(u - 1) << endl;
}
}

D题 Lost Cows

链接:https://ac.nowcoder.com/acm/contest/1032/D

树状数组 + 二分(or倍增)

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
long long tr[maxn];
void add(int x, int v){
if (x == 0) return;
while (x < maxn) {
tr[x] += v;
x += x & -x;
}
}
long long query(int x){
long long rec = 0;
while (x) {
rec += tr[x];
x -= x & -x;
}
return rec;
}
int a[maxn], ans[maxn];
int main(){
freopen("in.txt", "r", stdin);
int n; scanf("%d", &n);
for (int i = 2; i <= n; i++)
scanf("%d", &a[i]);
//二分,查询前mid个数有多少1比较,更新区间
for (int i = n; i; i--) {
int l = 1, r = n + 1, t;
while (l <= r) {
int mid = l + r >> 1;
if (query(mid) + a[i] < mid) t = mid, r = mid - 1;
else l = mid + 1;
}
ans[i] = t;
add(t, 1);
}
for (int i = 1; i <= n; i++)
printf("%d\n", ans[i]);
}

0x42 数据结构进阶-树状数组的更多相关文章

  1. Codeforces Round #248 (Div. 2) B称号 【数据结构:树状数组】

    主题链接:http://codeforces.com/contest/433/problem/B 题目大意:给n(1 ≤ n ≤ 105)个数据(1 ≤ vi ≤ 109),当中有m(1 ≤ m ≤  ...

  2. [ACM_数据结构] POJ2352 [树状数组稍微变形]

    Description Astronomers often examine star maps where stars are represented by points on a plane and ...

  3. 数据结构(树状数组):HEOI2012 采花

    [题目描述] 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便 ...

  4. 【poj 3167】Cow Patterns(字符串--KMP匹配+数据结构--树状数组)

    题意:给2个数字序列 a 和 b ,问按从小到达排序后,a中的哪些子串与b的名次匹配. a 的长度 N≤100,000,b的长度 M≤25,000,数字的大小 K≤25. 解法:[思考]1.X 暴力. ...

  5. 牛客练习赛22-E.简单数据结构1(扩展欧拉定理降幂 +树状数组)

    链接:E.简单数据结构1 题意: 给一个长为n的序列,m次操作,每次操作: 1.区间加 2.对于区间,查询 ,一直到- 请注意每次的模数不同.   题解:扩展欧拉定理降幂 对一个数p取log(p)次的 ...

  6. ACM数据结构-树状数组

    模板: int n; int tree[LEN]; int lowbit(int x){ return x&-x; } void update(int i,int d){//index,del ...

  7. NOIp 数据结构专题总结 (2):分块、树状数组、线段树

    系列索引: NOIp 数据结构专题总结 (1) NOIp 数据结构专题总结 (2) 分块 阅:<「分块」数列分块入门 1-9 by hzwer> 树状数组 Binary Indexed T ...

  8. 【洛谷 p3374】模板-树状数组 1(数据结构)

    题目:已知一个数列,你需要进行下面两种操作:1.将某一个数加上x:2.求出某区间每一个数的和. 解法:树状数组求前缀和. #include<cstdio> #include<cstd ...

  9. 【洛谷 p3368】模板-树状数组 2(数据结构)

    题目:已知一个数列,你需要进行下面两种操作:1.将某区间每一个数数加上x:2.求出某一个数的和. 解法:树状数组+前缀和优化.数组中每位存和前一位的数的差,这样区间修改只用改两位,单点询问就是求前缀和 ...

  10. 数据结构--树状数组(黑龙江省第八届大学生程序设计竞赛--post office)

    例题来源: 题目: 1468: Post office 题目描述 There are N(N<=1000) villages along a straight road, numbered fr ...

随机推荐

  1. 【学到一个新名词】String interning(字符串驻留/字符串内部化)

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 在阅读 VictoriaMetrics v1.95.1 的 ...

  2. Linux机器自建账号并赋予sudo权限,同时修改远程端口

    默认使用root账号来操作Linux有一定风险,因此需要自建账号并赋予sudo权限,方便使用 登录为root用户后,创建账号 adduser <username> Ubuntu系统会同时要 ...

  3. c#|创建一个简单的窗体项目

  4. 【Javaweb】做一个房产信息管理系统三(src目录的部署工作【三层框架】各个层含义)

    接下来,我打算进行Java文件的部署工作,但实际上为了得到更多的分数,我们还是应该先做页面 首先我们需要了解对于Javaweb,src下的目录应该如何部署:(三层架构单独开一篇讲) 那么这些都有什么含 ...

  5. preparedStatement.setObject()为什么要这样写?

    setObject就是给JDBC的SQL语句的占位符赋值的,即是下面的"?" 预编译的SQL:参数使用?作为占位符 注意:sql的参数使用?作为占位符. 如: select * f ...

  6. STM32外设:串行通信 USART、I2C、SPI

    USART:Universal Synchronous Asynchronous Receiver Transmitter 通用同步异步接收发送器 UART:异步中断 主要功能:接收指定长度的帧 数据 ...

  7. [ABC284G] Only Once

    Problem Statement For a sequence of length $N$, $A = (A_1,A_2,\dots,A_N)$, consisting of integers be ...

  8. MongoDB中的分布式集群架构

    MongoDB 中的分布式集群架构 前言 Replica Set 副本集模式 副本集写和读的特性 Sharding 分片模式 分片的优势 MongoDB 分片的组件 分片键 chunk 是什么 分片的 ...

  9. 最好用的AI换脸软件,rope下载介绍

    随着AI技术的广泛运用,市面上的换脸软件也多了起来,今天给各位介绍其中的王者Rope! 先上两个动图,给大伙看看效果 rope是如何实现这种自然的效果呢?这得益于机器学习技术的不断发展,rope经过深 ...

  10. 【scikit-learn基础】--『预处理』之 正则化

    数据的预处理是数据分析,或者机器学习训练前的重要步骤.通过数据预处理,可以 提高数据质量,处理数据的缺失值.异常值和重复值等问题,增加数据的准确性和可靠性 整合不同数据,数据的来源和结构可能多种多样, ...