调了好久。。。。

转化成三维偏序,cdq处理。

好像比较快?

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 300500
using namespace std;
long long n,m,x,a[maxn],pos[maxn],f1[maxn],f2[maxn],t[maxn],ans=;
struct pnt
{
long long a,b,c,ans;
}p[maxn];
bool cmp1(pnt x,pnt y) {return x.b<y.b;}
bool cmp2(pnt x,pnt y) {return x.b>y.b;}
bool cmp3(pnt x,pnt y) {return x.a<y.a;}
long long lowbit(long long x) {return (x&(-x));}
void add(long long x,long long val)
{
for (long long i=x;i<=n;i+=lowbit(i))
t[i]+=val;
}
long long ask(long long x)
{
long long ret=;
for (long long i=x;i>=;i-=lowbit(i))
ret+=t[i];
return ret;
}
void cdq1(long long left,long long right)
{
long long mid=left+right>>;
sort(p+left,p+mid+,cmp1);sort(p+mid+,p+right+,cmp1);
long long i=left,j=mid+;
while (j<=right)
{
while ((i<=mid) && (p[i].b<p[j].b))
{
add(p[i].c,);
i++;
}
p[j].ans+=ask(n)-ask(p[j].c);
j++;
}
for (long long j=left;j<i;j++) add(p[j].c,-);
}
void cdq2(long long left,long long right)
{
long long mid=left+right>>;
sort(p+left,p+mid+,cmp2);sort(p+mid+,p+right+,cmp2);
long long i=left,j=mid+;
while (j<=right)
{
while ((i<=mid) && (p[i].b>p[j].b))
{
add(p[i].c,);
i++;
}
p[j].ans+=ask(p[j].c-);
j++;
}
for (long long j=left;j<i;j++) add(p[j].c,-);
}
void cdq(long long left,long long right)
{
if (left==right) return;
long long mid=left+right>>;
cdq(left,mid);cdq(mid+,right);
cdq1(left,right);
cdq2(left,right);
}
int main()
{
scanf("%lld%lld",&n,&m);
for (long long i=;i<=n;i++)
{
scanf("%lld",&a[i]);
pos[a[i]]=i;
}
for (long long i=;i<=n;i++)
{
f1[pos[i]]=(pos[i]-)-ask(pos[i]-);
ans+=f1[pos[i]];
f2[pos[i]]=ask(n)-ask(pos[i]);
add(pos[i],);
}
memset(t,,sizeof(t));
for (long long i=;i<=m;i++)
{
scanf("%lld",&x);
p[i].a=i;p[i].b=pos[x];p[i].c=x;
}
cdq(,m);
sort(p+,p+m+,cmp3);
for (long long i=;i<=m;i++)
{
printf("%lld\n",ans);
x=p[i].c;
ans-=(f1[pos[x]]+f2[pos[x]]);
ans+=(p[i].ans);
}
return ;
}

BZOJ 3295 动态逆序对的更多相关文章

  1. BZOJ 3295 动态逆序对 | CDQ分治

    BZOJ 3295 动态逆序对 这道题和三维偏序很类似.某个元素加入后产生的贡献 = time更小.pos更小.val更大的元素个数 + time更小.pos更大.val更小的元素个数. 分别用类似C ...

  2. bzoj 3295 动态逆序对 (三维偏序,CDQ+树状数组)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 思路: 可以将这道题看成倒着插入,这样就可以转化成求逆序对数,用CDQ分治降维,正反用 ...

  3. bzoj 3295 动态逆序对 CDQ分支

    容易看出ans[i]=ans[i-1]-q[i],q[i]为删去第i个数减少的逆序对. 先用树状数组算出最开始的逆序对,预处理出每个数前边比它大的和后边比它小的,就求出了q[i]的初始值. 设b[i] ...

  4. BZOJ - 3295 动态逆序对 (树状数组套treap)

    题目链接 思路和bzoj2141差不多,不过这道题的数据更强一些,线段树套treapT了,树状数组套treap卡过~~ #include<bits/stdc++.h> using name ...

  5. [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)

    [BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...

  6. BZOJ 3295: [Cqoi2011]动态逆序对

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3865  Solved: 1298[Submit][Sta ...

  7. Bzoj 3295: [Cqoi2011]动态逆序对 分块,树状数组,逆序对

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2886  Solved: 924[Submit][Stat ...

  8. bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对

    http://www.lydsy.com/JudgeOnline/problem.php?id=3295 正着删除看做倒着添加 对答案有贡献的数对满足以下3个条件: 出现时间:i<=j 权值大小 ...

  9. 2018.07.01 BZOJ3295: [Cqoi2011]动态逆序对(带修主席树)

    3295: [Cqoi2011]动态逆序对 **Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j& ...

随机推荐

  1. Cayley n顶点树数定理

    出处:http://blog.csdn.net/gongqian12345/article/details/7445573 今天遇到一个问题:在一个n阶完全图的所有生成树的数量为n的n-2次方,想了好 ...

  2. laravel where中多条件查询

    1. http://www.mobanstore.com/doc/bianchengkaifa/119.html //初学laravel 发现他的查询构造器很好用 //如下 $user = DB::t ...

  3. 调用MYSQL存储过程实例

    PHP调用MYSQL存储过程实例 http://blog.csdn.net/ewing333/article/details/5906887 http://www.cnblogs.com/kkchen ...

  4. JAVA Map集合类简介

    了解最常用的集合类型之一 Map 的基础知识以及如何针对您应用程序特有的数据优化 Map. 本文相关下载: · Jack 的 HashMap 测试· Oracle JDeveloper 10g jav ...

  5. Task 使用 Task以及Task.Factory都是在.Net 4引用的。Task跟Thread很类似,通过下面例子可以看到。

    static public void ThreadMain() { Thread t1 = new Thread(TaskWorker); t1.Start(3); } static public v ...

  6. MongoDB (四) MongoDB 数据模型

    在 MongoDB 中的数据有灵活的模式.在相同集合中文档并不需要有相同的一组字段或结构的公共字段的集合,文档可容纳不同类型的数据. MongoDB设计模式的一些考虑 可根据用户要求设计架构. 合并对 ...

  7. 545B. Equidistant String

    题目链接 输入两个只含有01的字符串,s,t 求一个字符串p使到s,t的距离一样 这里的距离是指对应位置:0-0的距离是0 ,o-1的距离是1 ,1-1的距离是0,1-0的距离是1 这里只要求找出满足 ...

  8. http和socket通信的区别

    应用层:HTTP协议(基于传输层的TCP协议,主要解决如何包装数据) 传输层: TCP协议(基于网络层的IP协议).TPC/IP协议(主要解决数据如何在网络中传输) 网络层: IP 协议 socket ...

  9. SPOJ 227 Ordering the Soldiers 线段树 / 树状数组

    题意:设原数组为a[i],pos[i]代表第 i 个位置之前有多少个数比a[i]大,求原数组a[i]. 这个题意是看了别人的题解才明白,我自己没读出来…… 方法:假设我们从左往右放,因为后面的数还有可 ...

  10. c# 计算1-100之间的所有奇数的和

    求1-100之间所有奇数整数和: class Program { static void Main(string[] args) { ,); Console.WriteLine("1-100 ...