调了好久。。。。

转化成三维偏序,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. 【二】php常用方法

    -------------------------------数据类型------------------------------------------ 1.settype(var,type)  类 ...

  2. POJ 1661 Help Jimmy (dijkstra,最短路)

    刚在百度搜索了一下这道题的题解, 因为看到有别人用动态规划做的,所以想参考一下. 结果顺带发现了有那么几个网站,上面的文章竟然和我这篇一模一样(除了一些明显的错别字外),我去,作者还是同一个人Admi ...

  3. Linux网络编程4——个人总结

    TCP与UDP通信流程 TCP通信的基本步骤如下: 服务端:socket---bind---listen---while(1){---accept---recv---send---close---}- ...

  4. 初学Ajax(一)

    以下文字根据李炎恢——jQuery教程整理而成. Ajax全称为:“Asynchronous JavaScript and XML”(异步JavaScript和XML),它并不是JavaScript的 ...

  5. 用C语言写个程序推算出是星期几?(用泰勒公式实现)

    在日常生活中,我们常常遇到要知道某一天是星期几的问题.有时候,我们还想知道历史上某一天是星期几.比如: “你出生的那一天是星期几啊?” “明年五一是不是星期天?我去找你玩?” 通常,解决这个问题的最简 ...

  6. Java-在线聊天系统-非线程

    一.概述 1.目标:建立基于tcp协议的聊天系统 2.思路:用java socket编程 二.代码 1.ChatServer.java import java.io.DataInputStream; ...

  7. wordpress安装,创建配置文件无反应

    wordpress安装时,点击“创建配置文件”无反应,可以手动创建wp-config.php, 打开wp-config-sample.php,配置相关信息,然后将文件改名为wp-config.php上 ...

  8. XP下,文件夹添加右键命令行

    原文:XP下,文件夹添加右键命令行 总共有3种方式: --------------------1---------------------------------------------------- ...

  9. 转载网易博客:整理各大网站让网站变灰的css代码

    2013-07-21 15:06:47 北京时间2013年4月20日8时02分四川省雅安市芦山县(北纬30.3,东经103.0)发生7.0级地震.震源深度13公里.各大网站将其网站变灰,本人整理了下部 ...

  10. Redis的String操作

    set key value [ex 秒数] / [px 毫秒数] [nx] /[xx] 如: set a 1 ex 10 , 10秒有效 Set a 1 px 9000 , 9秒有效 注: 如果ex, ...