P3374 【模板】树状数组 1(cdq)】的更多相关文章

题目链接 简易CDQ分治教程 //每个操作分解为一个有序数对(t,p),即(时间,操作位置),时间默认有序,用CDQ分治处理第二维 //对于位置相同的操作 修改优先于查询 //时间是默认有序的 所以可以忽略掉对操作的影响:有影响的只是位置.(再理解) #include <cstdio> #include <cctype> #define gc() getchar() //typedef long long LL; const int N=5e5+5; int n,m,Ans[N];…
闲来无事(其实是打了两三道树状数组题),写了个树状数组模板…… /* Author: hotwords */ template<typename tp> class BinTree { private: int n;tp *a; public: inline int lowbit(int x)const{return x&-x;} int size()const{return n;} void empty() { if(a) delete []a; n=;a=; } void clea…
HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using namespace std; int cases,n,tree[200500],ql,qr; char s[50]; void build(int l,int r,int num){ if(l==r){scanf("%d",&tree[num]);return;} int mid=(l+…
题目:已知一个数列,你需要进行下面两种操作:1.将某一个数加上x:2.求出某区间每一个数的和. 解法:树状数组求前缀和. #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> using namespace std; ; int n; int c[N]; int lowbit(int x) {return x&-x;} void ins(int x,int d)…
BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为询问与格子(x,y)的曼哈顿距离不超过z的格子值的和. (1 ≤ n ≤10 000, 1 ≤ m ≤ 80 000)  题解 这道题如果数据不大,那就可以直接用二维的树状数组来做. 方法1:二维树状数组 因为数据比较大,所以要离线处理并且离散化一下修改的值,再用二维树状数组: 查询的是菱形,我们把…
题目:已知一个数列,你需要进行下面两种操作:1.将某区间每一个数数加上x:2.求出某一个数的和. 解法:树状数组+前缀和优化.数组中每位存和前一位的数的差,这样区间修改只用改两位,单点询问就是求前缀和. #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> using namespace std; ; int n; int c[N]; int lowbit(int x)…
题目:http://poj.org/problem?id=2299 只能相邻两个交换,所以交换一次只会减少一个逆序对.所以交换次数就是逆序对数. ps:原来树状数组还可以记录后边lowbit位的部分和.见代码. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 500005 using namespace std; int n,f[ma…
传送门 拿个二维偏序练练cdq板子,其实就和归并排序差不多,复杂度不太会,似乎nlogn?. #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; ; ; typedef long long LL; inline LL rd(){ LL x=,f=;char ch=getchar(); :;ch=getchar();} )+(x…
链接 luogu 思路 可耐我连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' &&am…
P3374 [模板]树状数组 1 cdq分治 刚学了cdq分治(dyf神犇强力安利下),发现可以做这种题,当然是来试水了(逃 cdq好像只能离线的样子 cdq分治(转) 以下是摘录的几句: 在合并的时候,我们只处理左区间的修改,只统计右区间的查询 因为左区间的修改一定可以影响右区间的查询 这就体现出了CDQ分治的基本思想了 我们把所有操作都记录到了一个数组中,所以数组的大小至少要开到500000*3 过程: 按操作顺序读入--->按位置从小到大归并排序(这样可以保证每个询问操作进行前,都只有位置…