链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2141

思路:

其实就是求动态逆序对。。。cdq降维,用树状数组前后求两遍逆序对就好了

切水题真爽QAQ

实现代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int M = 1e5+;
int c[M<<],a[M],b[M],ans[M];
int n,m;
struct node{
int x,y,t;
int kind,id;
node(){}
node(int a,int b,int c,int d,int e):t(a),x(b),y(c),kind(d),id(e){}
bool operator < (const node &k) const {
if(x == k.x) return t < k.t;
return x < k.x;
}
}q[M],t[M]; void add(int x,int val){
while(x <= n){
c[x] += val;
x += (x&-x);
}
} int getsum(int x){
int sum = ;
while(x){
sum += c[x];
x -= (x&-x);
}
return sum;
} void cdq(int l,int r){
if(l >= r) return ;
int mid = (l + r) >> ;
for(int i = l;i <= r;i ++){
if(q[i].t <= mid) add(q[i].y,q[i].kind);
else ans[q[i].id] += q[i].kind*(getsum(n) - getsum(q[i].y));
}
for(int i = l;i <= r;i ++)
if(q[i].t <= mid) add(q[i].y,-q[i].kind); for(int i = r;i >= l;i --){
if(q[i].t <= mid) add(q[i].y,q[i].kind);
else ans[q[i].id] += q[i].kind*(getsum(q[i].y-));
}
for(int i = r;i >= l;i --)
if(q[i].t <= mid) add(q[i].y,-q[i].kind); int L = l,R = mid+;
for(int i = l;i <= r;i ++){
if(q[i].t <= mid) t[L++] = q[i];
else t[R++] = q[i];
}
for(int i = l;i <= r;i ++) q[i] = t[i];
cdq(l,mid); cdq(mid+,r);
} int main()
{
scanf("%d",&n);
for(int i = ;i <= n;i ++){
scanf("%d",&a[i]);
b[i] = a[i];
}
int cnt = ;
sort(b+,b++n);
int len = unique(b+,b++n)-b-;
for(int i = ;i <= n;i ++){
a[i] = lower_bound(b+,b+len+,a[i])-b;
q[++cnt] = node(cnt,i,a[i],,);
}
scanf("%d",&m);
for(int i = ;i <= m;i ++){
int x,y;
scanf("%d%d",&x,&y);
q[++cnt] = node(cnt,x,a[y],,i);
q[++cnt] = node(cnt,x,a[x],-,i);
q[++cnt] = node(cnt,y,a[x],,i);
q[++cnt] = node(cnt,y,a[y],-,i);
swap(a[x],a[y]);
}
sort(q+,q+cnt+);
cdq(,cnt);
printf("%d\n",ans[]);
for(int i = ;i <= m;i ++){
ans[i] += ans[i-];
}
for(int i = ;i <= m;i ++)
printf("%d\n",ans[i]);
}

bzoj 2141 : 排队 (cdq分治+bit)的更多相关文章

  1. BZOJ 2141: 排队 [CDQ分治]

    题意: 交换序列中两个元素,求逆序对 做分块做到这道题...一看不是三维偏序嘛.... 作为不会树套树的蒟蒻就写CDQ分治吧.... 对时间分治...x排序...y树状数组... 交换拆成两个插入两个 ...

  2. [BZOJ 3456]城市规划(cdq分治+FFT)

    [BZOJ 3456]城市规划(cdq分治+FFT) 题面 求有标号n个点无向连通图数目. 分析 设\(f(i)\)表示\(i\)个点组成的无向连通图数量,\(g(i)\)表示\(i\)个点的图的数量 ...

  3. [BZOJ 2989]数列(CDQ 分治+曼哈顿距离与切比雪夫距离的转化)

    [BZOJ 2989]数列(CDQ 分治) 题面 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[y]| ...

  4. BZOJ 2141 排队 (CDQ分治)

    [BZOJ2141]排队 这道题和动态逆序对比较像(BZOJ-3295 没做过的同学建议先做这题),只是删除操作变成了交换.解法:交换操作可以变成删除加插入操作,那么这题就变成了 (时间,位置,值)的 ...

  5. bzoj 4237 稻草人 - CDQ分治 - 单调栈

    题目传送门 传送点I 传送点II 题目大意 平面上有$n$个点.问存在多少个矩形使得只有左下角和右上角有点. 考虑枚举左下角这个点.然后看一下是个什么情况: 嗯对,是个单调栈.但不可能暴力去求每个点右 ...

  6. bzoj 3262 陌上花开 - CDQ分治 - 树状数组

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...

  7. bzoj 2141: 排队

    2141: 排队 Time Limit: 4 Sec Memory Limit: 259 MB Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我, ...

  8. Bzoj 2141: 排队 分块,逆序对,树状数组

    2141: 排队 Time Limit: 4 Sec  Memory Limit: 259 MBSubmit: 1310  Solved: 517[Submit][Status][Discuss] D ...

  9. bzoj 2141 : 排队 分块

    题目链接 2141: 排队 Time Limit: 4 Sec  Memory Limit: 259 MBSubmit: 1169  Solved: 465[Submit][Status][Discu ...

随机推荐

  1. maven 插

    一.maven插件元素 <?xml version="1.0" encoding="utf-8"?> <plugin> <!--插 ...

  2. 如何把js的代码写的更加容易维护(一)--面向对象编程

    总是头疼javascript的代码写起来不可维护,那么看看下面的代码: (function (w, $) { var app = { init: function () { var me = this ...

  3. CSV文件解析

    CSV(逗号分隔值文件格式)        逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和 ...

  4. 搭建SpringBoot+dubbo+zookeeper+maven框架(二)

    上一篇文章是关于搭建SpringBoot+dubbo+zookeeper+maven框架的,但是里面的功能还不够完善,今天就日志管理方面做一些改善. 下了demo的网友可能会发现项目在启动时会有警告: ...

  5. 【微服务】使用spring cloud搭建微服务框架,整理学习资料

    写在前面 使用spring cloud搭建微服务框架,是我最近最主要的工作之一,一开始我使用bubbo加zookeeper制作了一个基于dubbo的微服务框架,然后被架构师否了,架构师曰:此物过时.随 ...

  6. SqlBulkCopy简单封装,让批量插入更方便

    关于 SqlServer 批量插入的方式,前段时间也有大神给出了好几种批量插入的方式及对比测试(http://www.cnblogs.com/jiekzou/p/6145550.html),估计大家也 ...

  7. Unity Jobsystem 详解实体组件系统ECS

    原文摘选自Unity Jobsystem 详解实体组件系统ECS 简介 随着ECS的加入,Unity基本上改变了软件开发方面的大部分方法.ECS的加入预示着OOP方法的结束.随着实体组件系统ECS的到 ...

  8. CEPH Object Gateway

    参考文档: CEPH OBJECT GATEWAY:http://docs.ceph.com/docs/master/radosgw/ 一.环境准备 1. Ceph Object Gateway框架 ...

  9. Python_复习_习题_29

    # 之前做得的题 以后再遇到能保证会# 下周二考 :所有的知识# 面试题:认真对待## 三元运算符# 接收结果的变量 = 条件为真的结果 if 条件 else 条件为假的结果# 接收结果的变量 = “ ...

  10. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace-树状数组-区间修改,单点查询

    赛后和队友讨论了一波,感谢无敌的队友给我细心的讲题 先埋坑 #include<iostream> #include<string.h> #include<algorith ...