bzoj 3295 CDQ求动态逆序对
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
#define PLI pair<LL, int>
#define PLL pair<LL, LL>
#define y1 skldjfskldjg
#define y2 skldfjsklejg using namespace std; const int N = 1e5 + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 +;
const double PI = acos(-);
const double eps = 1e-; int n, m, pos[N], R[N], L[N];
LL ans[N]; struct BIT {
int a[N];
void modify(int x, int v) {
for(int i = x; i <= n; i += i & -i)
a[i] += v;
}
int sum(int x) {
int ans = ;
for(int i = x; i; i -= i & -i)
ans += a[i];
return ans;
} } bit; struct QUS {
int t, x, val;
} qus[N], tmp[N]; void cdq(int l, int r) {
if(l == r) return;
int mid = l + r >> ;
cdq(l, mid); cdq(mid + , r); int j = l;
for(int i = mid + ; i <= r; i++) {
while(j <= mid && qus[j].x < qus[i].x) bit.modify(qus[j++].val, );
L[qus[i].t] += bit.sum(n) - bit.sum(qus[i].val);
}
for(int i = j - ; i >= l; i--) bit.modify(qus[i].val, -); j = mid;
for(int i = r; i >= mid + ; i--) {
while(j >= l && qus[j].x > qus[i].x) bit.modify(qus[j--].val, );
R[qus[i].t] += bit.sum(qus[i].val - );
}
for(int i = j + ; i <= mid; i++) bit.modify(qus[i].val, - ); int tot = l, p = l, q = mid + ;
while(p <= mid && q <= r) {
if(qus[p].x < qus[q].x) tmp[tot++] = qus[p++];
else tmp[tot++] = qus[q++];
}
while(p <= mid) tmp[tot++] = qus[p++];
while(q <= r) tmp[tot++] = qus[q++];
for(int i = l; i <= r; i++) qus[i] = tmp[i];
} int main() {
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) {
int val; scanf("%d", &val);
pos[val] = i;
} int idx = n;
for(int i = ; i <= m; i++) {
int val; scanf("%d", &val);
qus[idx].val = val;
qus[idx].t = idx;
qus[idx--].x = pos[val];
pos[val] = -;
} for(int i = ; i<= n; i++) {
if(pos[i] != -) {
qus[idx].val = i;
qus[idx].t = idx;
qus[idx--].x = pos[i];
pos[i] = -;
}
} cdq(, n);
for(int i = ; i <= n; i++) ans[i] = ans[i - ] + R[i] + L[i];
for(int i = n; i > n - m; i--) printf("%lld\n", ans[i]);
return ;
}
/*
*/
bzoj 3295 CDQ求动态逆序对的更多相关文章
- BZOJ 3295:[Cqoi2011]动态逆序对(三维偏序 CDQ分治+树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3295 题意:简单明了. 思路:终于好像有点明白CDQ分治处理三维偏序了.把删除操作看作是插入操作,那 ...
- 洛谷P1393 动态逆序对(CDQ分治)
传送门 题解 听别人说这是洛谷用户的双倍经验啊……然而根本没有感觉到……因为另外的那题我是用树状数组套主席树做的……而且莫名其妙感觉那种方法思路更清晰(虽然码量稍稍大了那么一点点)……感谢Candy大 ...
- BZOJ 3295 动态逆序对 | CDQ分治
BZOJ 3295 动态逆序对 这道题和三维偏序很类似.某个元素加入后产生的贡献 = time更小.pos更小.val更大的元素个数 + time更小.pos更大.val更小的元素个数. 分别用类似C ...
- [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)
[BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...
- Bzoj 3295: [Cqoi2011]动态逆序对 分块,树状数组,逆序对
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2886 Solved: 924[Submit][Stat ...
- BZOJ 3295: [Cqoi2011]动态逆序对
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3865 Solved: 1298[Submit][Sta ...
- [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...
- cdq分治(hdu 5618 Jam's problem again[陌上花开]、CQOI 2011 动态逆序对、hdu 4742 Pinball Game、hdu 4456 Crowd、[HEOI2016/TJOI2016]序列、[NOI2007]货币兑换 )
hdu 5618 Jam's problem again #include <bits/stdc++.h> #define MAXN 100010 using namespace std; ...
- bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对
http://www.lydsy.com/JudgeOnline/problem.php?id=3295 正着删除看做倒着添加 对答案有贡献的数对满足以下3个条件: 出现时间:i<=j 权值大小 ...
随机推荐
- Javascript基本代码
简单的了解了javascript 的基本代码,感觉和c#中的语句差不多. <!DOCTYPE html> <html xmlns="http://www.w3.org/19 ...
- zoj 2369 Two Cylinders
zoj 2369 Two Cylinders 链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2369 题意:已知两个无 ...
- 在IAR使用FreeRTOS出现Error[Pa045]: function "XXX" has no prototype
FreeRTOS官方例程中设置了需要“Require prototype”,所以每个函数(除了main函数)都需要函数声明,其中对于无形参的函数声明要加void,比如void led_init(voi ...
- FreeRTOS - 任务使用注意
如果使用xTaskCreate() 创建任务,任务栈使用的是FreeRTOS heap
- uboot各文件及文件夹分析
1.配置编译 uboot的配置编译需要在linux原生文件夹下,因为在编译过程中会生成符号链接.在windows中不支持.配置方法是:首先cd进入uboot源码的根目录,然后在根目录下执行:make ...
- java nio buffer读取数据乱码问题
public static void main(String[] args) throws IOException { String charsetName = "GBK"; St ...
- 【BZOJ】1984 月下“毛景树”
[算法]树链剖分+线段树 [题解]线段树的区间加值和区间覆盖操作不能同时存在,只能存在一个. 修改:从根节点跑到目标区域路上的标记全部下传,打完标记再上传回根节点(有变动才需要上传). 询问:访问到目 ...
- aptitude约等于apt-get的工具
如题,与之不同的是其会将依赖的程序也给删除. https://baike.baidu.com/item/aptitude/6849487?fr=aladdin 以下是一些常用 aptitude命令,仅 ...
- 【Android framework】AndroidManagerService初始化流程
源码基于Android 4.4. system_server的初始化 system_server受AMS管理,负责启动framework-res.apk和SettingsProvider.apk. ...
- freeradius防止用户异常断开无法重新链接上
freeradius防止用户异常断开无法重新链接上 http://www.cnblogs.com/klobohyz/archive/2012/02/08/2342532.html 编辑default文 ...