luoguP3374 【模板】树状数组 1 cdq
链接
思路
可耐我连cdq都不会,Orz 陈丹琦
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 7;
int read() {
int x = 0, f = 1; char s = getchar();
for (;s > '9' || s < '0'; s = getchar()) if (s == '-') f = -1;
for (;s >= '0' && s <= '9'; s = getchar()) x = x * 10 + s - '0';
return x * f;
}
int ans[N];
struct node {
int type, id, val;
node(int a = 0,int b = 0, int c = 0) {
type = a, id = b, val = c;
}
bool operator < (const node &b) const {
return id == b.id ? type < b.type : id < b.id;
}
} Q[N<<2], tmp[N<<2];
void cdq(int l, int r){
if (l == r) return;
int mid = (l + r) >> 1;
cdq(l, mid), cdq(mid + 1, r);
int p = l, q = mid + 1, js = l, sum = 0;
while (p <= mid && q <= r) {
if (Q[p] < Q[q]) {
if (Q[p].type == 1) sum += Q[p].val;
tmp[js++] = Q[p++];
} else {
if (Q[q].type == 2) ans[Q[q].val] -= sum;
if (Q[q].type == 3) ans[Q[q].val] += sum;
tmp[js++] = Q[q++];
}
}
while (p <= mid) tmp[js++] = Q[p++];
while (q <= r) {
if (Q[q].type == 2) ans[Q[q].val] -= sum;
if (Q[q].type == 3) ans[Q[q].val] += sum;
tmp[js++] = Q[q++];
}
for (int i = l; i <= r; ++i) Q[i] = tmp[i];
}
int main() {
int n = read(), m = read(), js = 0, DSR = 0;
for (int i = 1; i <= n; ++i) {
int x = read();
Q[++js] = node(1, i, x);
}
for(int i = 1; i <= m; ++i) {
int opt = read(), x = read(), y = read();
if (opt == 1) {
Q[++js] = node(1, x, y);
} else {
Q[++js] = node(2, x-1, ++DSR),
Q[++js] = node(3, y, DSR);
}
}
cdq(1, js);
for (int i = 1; i <= DSR; ++i) printf("%d\n", ans[i]);
return 0;
}
luoguP3374 【模板】树状数组 1 cdq的更多相关文章
- 洛谷.3374.[模板]树状数组1(CDQ分治)
题目链接 简易CDQ分治教程 //每个操作分解为一个有序数对(t,p),即(时间,操作位置),时间默认有序,用CDQ分治处理第二维 //对于位置相同的操作 修改优先于查询 //时间是默认有序的 所以可 ...
- [模板] 树状数组 (C++ class)
闲来无事(其实是打了两三道树状数组题),写了个树状数组模板…… /* Author: hotwords */ template<typename tp> class BinTree { p ...
- HDU 1166 线段树模板&树状数组模板
HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...
- 【 HDU - 4456 】Crowd (二维树状数组、cdq分治)
BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为 ...
- 【洛谷 p3374】模板-树状数组 1(数据结构)
题目:已知一个数列,你需要进行下面两种操作:1.将某一个数加上x:2.求出某区间每一个数的和. 解法:树状数组求前缀和. #include<cstdio> #include<cstd ...
- 【洛谷 p3368】模板-树状数组 2(数据结构)
题目:已知一个数列,你需要进行下面两种操作:1.将某区间每一个数数加上x:2.求出某一个数的和. 解法:树状数组+前缀和优化.数组中每位存和前一位的数的差,这样区间修改只用改两位,单点询问就是求前缀和 ...
- POJ2299逆序对模板(树状数组)
题目:http://poj.org/problem?id=2299 只能相邻两个交换,所以交换一次只会减少一个逆序对.所以交换次数就是逆序对数. ps:原来树状数组还可以记录后边lowbit位的部分和 ...
- LUGOU P3374 【模板】树状数组 1(CDQ 分治)
传送门 拿个二维偏序练练cdq板子,其实就和归并排序差不多,复杂度不太会,似乎nlogn?. #include<iostream> #include<cstdio> #incl ...
- P3374 【模板】树状数组 1(cdq)
P3374 [模板]树状数组 1 cdq分治 刚学了cdq分治(dyf神犇强力安利下),发现可以做这种题,当然是来试水了(逃 cdq好像只能离线的样子 cdq分治(转) 以下是摘录的几句: 在合并的时 ...
随机推荐
- 核与线程 CPU 4核8线程 的解释
1.物理CPU: 物理CPU就是计算机上实际配置的CPU个数.在linux上可以打开cat /proc/cpuinfo 来查看,其中的physical id就是每个物理CPU的ID,能找到几个phys ...
- 在excel实现多级联动
最近做了一个Excel的多级联动的功能,具体是将全国所有的气象局按一二三四级单位做成四列,实现各级的联动下拉选择,这和省市县乡的各级联动的功能基本一样,下面记录下具体的操作步骤. 1.首先需要从数据库 ...
- quota - linux磁盘配额管理
磁盘管理系列 linux磁盘管理系列一:磁盘配额管理 http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...
- [其它]iOS 13 正式版发布 iPhone 6s或更新型号均可升级
苹果今天(2019.09.20)发布了 iOS 13 正式版,可以升级的设备包括 iPhone 6s 或更新型号.第七代 iPod Touch. iOS 13 推出深色模式,为 iPhone 带来截然 ...
- SAP HANA学习资料大全 Simple Finane + Simple Logisitic [非常完善的学习资料汇总]
Check out this SDN blog if you plan to write HANA Certification exam http://scn.sap.com/community/ha ...
- 87.CSS Flex 弹性盒模型布局教程(共用的css在48篇文章gird)
CSS Flex 弹性盒模型布局教程 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. flex布局就是给任何一个容器添加 dis ...
- The Vertu of the Dyamaund钻石
dyamaund and the English words dyamaund The Vertu of the Dyamaund": Gemstones, Knowledge and Va ...
- springmvc核心流程
用户请求DispathcerServlet(前端控制器). (前端控制器)DispatcherServlet接受到请求,将根据请求信息交给处理器映射器(HandlerMapping). 处理器映射器( ...
- Axios的简单用法
一转眼Vue 3.0都要发布了,学习使用Vue也有一段时间了,记录一下axios的用法 Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中,有点类似于aja ...
- Java开发环境配置大全
Java开发环境配置 零章:JDK安装教程 壹章:Tomcat安装教程 贰章:IntelliJ IDEA安装教程 叁章:MySql安装教程 肆章:Maven安装教程 伍章:MongoDB安装教程 陆章 ...