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. 【外包杯】【报错】(表面解决实际未解决)微信小程序报错:[渲染层错误] TypeError: Cannot read property ‘$$‘ of undefined

    半解不解吧,反正实现了就行 渲染层出错,滑动图片组件无法显示,(swiper是轮播图插件,因此错误应该出现在swiper渲染中) 可以这样移动,但是没有图片 我觉得是路径的问题 兄弟们,目前没有解决接 ...

  2. 国内 AI 成图第一案!你来你会怎么判?

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  3. 基于Browscap对浏览器工具类优化

    项目背景 原有的启动平台公共组件库comm-util的浏览器工具类BrowserUtils是基于UserAgentUtils的,但是该项目最后一个版本发布于 2018/01/24,之至今日23年底,已 ...

  4. Python:单元测试框架unittest

    1.什么是单元测试 测试函数/方法或者一段代码,用于检验被测代码的一个很小的.很明确的功能是否正确,通常是开发做. 在Python中的单元测试框架有Unittest和Pytest,现在总结Unitte ...

  5. 28、错误error

    1.是什么? 在实际的项目中,我们希望通过程序的错误信息快速定位问题,但是又不喜欢错误处理:代码就会很冗余又啰嗦.Go语言没有提供类似Java.C#语言中的try...catch异常处理方法,而是通过 ...

  6. 打造一个极度舒适的Chrome扩展项目开发环境

    大家好,我是 dom 哥.这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星. Chrome 扩展能够提高浏览器的使用体验,通过自定义 UI 界面,监听浏览器事件,改变 Web 页 ...

  7. Python——Html(语法、格式、段落、文字处理、路径、超链接、图片、视频)

    HTML(Hyper Text Markup Language超文本标记语言)用特殊的一种标签把需要特殊展示出来的内容圈起来.这就是标记语言语法规则 <标记>被标记的内容</标记&g ...

  8. Pikachu漏洞靶场 敏感信息泄露

    敏感信息泄露 概述 由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到. 比如: 通过访问url下的目录,可以直接列出目录下的文件列表; 输入错误的url参数后报错信息里面 ...

  9. Salesforce LWC学习(四十六) record-picker组件浅谈

    本篇参考: https://developer.salesforce.com/docs/platform/lwc/guide/reference-graphql.html https://develo ...

  10. Head First 的学习之道

    <Head First 设计模式>是一本好书,正如书的封面上说的那样,这是一本重视大脑的学习指南.里面提到了一些学习方法,可以尝试下,看看哪些对你有用: 1. 慢一点,理解的越多,需要记得 ...