bzoj3295 动态逆序对

【langchain4j篇02】:解锁流式对话:AiService注解与Flux响应实战解析 本文深入解析了如何使用LangChain4j的AiService注解和Flux响应实现流式对话,提升大模型交互体验。从环境配置到声明式接口开发,详细介绍了流式响应的关键技术和性能优化策略,帮助开发者快速掌握高级API应用。 阅读详情

题目:对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。

思路:如果倒着看的话,就变成了插入操作,第一个删除的数使最后一个插入的数,我们用<x,y,t>来表示每个插入操作,x表示插入位置,y表示插入的数,t表示插入的时间,对时间进行二分操作,每次保证左边区间的时间都小于右边区间的时间,并且每个区间的x都是递增的

_left[i]表示第i次操作后,和左边的数新构成的逆序对的对数

_right[i]表示第i次操作后,和右边的数新构成的逆序对的对数

代码:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<ctime>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<list>
#include<numeric>
using namespace std;
#define LL long long
#define ULL unsigned long long
#define INF 0x3f3f3f3f
#define mm(a,b) memset(a,b,sizeof(a))
#define PP puts("*********************");
template<class T> T f_abs(T a){ return a > 0 ? a : -a; }
template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
// 0x3f3f3f3f3f3f3f3f
//0x3f3f3f3f

const int maxn=1e5+50;
struct Node{
    int x,y,t;
}q[maxn],q1[maxn],q2[maxn];
struct BIT{
    int n,b[maxn];
    void init(int _n){
        n=_n;
        mm(b,0);
    }
    void add(int i,int val){
        for(;i<=n;i+=i&(-i))
            b[i]+=val;
    }
    int sum(int i){
        int ret=0;
        for(;i>0;i-=i&(-i))
            ret+=b[i];
        return ret;
    }
}bit;
int pos[maxn];
LL ans[maxn];
int _left[maxn],_right[maxn];
int n,m;
void cdq(int L,int R){
    if(L>=R) return;
    int sz1=0,sz2=0;
    int mid=(L+R)>>1;
    for(int i=L;i<=R;i++){
        if(q[i].t<=mid) q1[sz1++]=q[i];
        else q2[sz2++]=q[i];
    }
    int j=0;
    for(int i=0;i<sz2;i++){
        for(;j<sz1&&q1[j].x<q2[i].x;j++)
            bit.add(q1[j].y,1);
        _left[q2[i].t]+=bit.sum(n)-bit.sum(q2[i].y);
    }
    for(int i=0;i<j;i++)
        bit.add(q1[i].y,-1);

    j=sz1-1;
    for(int i=sz2-1;i>=0;i--){
        for(;j>=0&&q1[j].x>q2[i].x;j--)
            bit.add(q1[j].y,1);
        _right[q2[i].t]+=bit.sum(q2[i].y-1);
    }
    for(int i=sz1-1;i>j;i--)
        bit.add(q1[i].y,-1);
    memcpy(q+L,q1,sz1*sizeof(Node));
    memcpy(q+L+sz1,q2,sz2*sizeof(Node));
    cdq(L,mid);
    cdq(mid+1,R);
}
int main(){

//    freopen("D:\\input.txt","r",stdin);
//    freopen("D:\\output.txt","w",stdout);
    int x;
    while(~scanf("%d%d",&n,&m)){
        bit.init(n);
        for(int i=1;i<=n;i++){
            scanf("%d",&q[i].y);
            q[i].x=i;q[i].t=0;
            pos[q[i].y]=i;
            ans[i]=_left[i]=_right[i]=0;
        }
        int tim=n;
        for(int i=1;i<=m;i++){
            scanf("%d",&x);
            q[pos[x]].t=tim--;
        }
        for(int i=1;i<=n;i++)
            if(q[i].t==0)
                q[i].t=tim--;
//        PP;
//        for(int i=1;i<=n;i++)
//            printf("%d %d %d\n",q[i].x,q[i].y,q[i].t);
        cdq(1,n);
        ans[0]=_left[0]=_right[0]=0;
        for(int i=1;i<=n;i++)
            ans[i]=ans[i-1]+_left[i]+_right[i];
        for(int i=n;i>n-m;i--)
            printf("%lld\n",ans[i]);
//        PP;
//        for(int i=1;i<=n;i++)
//            printf("%d  %d  %d\n",i,_left[i],_right[i]);
//        for(int i=1;i<=n;i++)
//            printf("%d ",bit.b[i]);
    }
    return 0;
}


VTK 9.2.0 在 Windows 10 上编译全记录:从 CMake 配置到 VS2019 项目生成(附 Qt 环境变量避坑点) 本文详细记录了VTK 9.2.0在Windows 10上的编译全过程,从CMake配置到VS2019项目生成,特别强调了Qt环境变量的避坑点。通过实战步骤和调试技巧,帮助开发者顺利完成VTK编译,适用于三维可视化开发。 阅读详情

相关推荐

Linux中Hadoop 集群搭建

零、下载Hadoop: http://archive.cloudera.com/cdh5/cdh/5/?tdsourcetag=s_pctim_aiomsg 一、集群规划: 搭建的 hadoop 集群由 3 台服务器组成,分别叫做 master,salve1 和 slave2。其中 master 作为主节点,slave1 和 slave2 作为从节点。 二、网络配置: 1.查看 3 个节点的主机名...

白墨的小白博客 3990

动态逆序对

题目链接 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删 除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数 Input 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数。 以下n行每行包含一个1到n之间的正整数,即初始排列。 以下m行每行一个正整数,依次为每次删除的元素。 N<=100000 M<=50000 Output 输出包含m行,依次为删除每个元素之前

qq_45778406的博客 651

PTA编程—币值转换

我对于这个题的主要思想就是把九位数分三块,对每块进行处理后,再合并。有了这个思想就开始写代码,后面就是哪有洞补哪,哪个测试用例没通过就对其特殊处理…。反正最后测试用例全通过了。 #include<iostream> #include <string> #include <algorithm> using namespace std; char a[10]={'a','b','c','d','e','f','g','h','i','j'}; //既然题目说了最多9位

uyo9ko的博客 990

Luogu P1393 动态逆序对

戳我看题面 常规操作:离线后删除改成插入(倒着做) 问题就变成了插入一个数,求逆序对 求逆序对是cdq分治,所以插入一个数求逆序对多半也是cdq分治 构造三元组,表示时间,表示位置,表示数的大小 新插入一个数带来的影响无疑是          且(,或者,)  记下来后求一前缀和就搞定了 #include&lt;cstdio&gt; #define ll long long usi...

YYHS_WSF的博客 316

el-table通过上下左右键移动光标

在Element Plus的el-table中包含el-input和el-select组件,要实现上下左右键控制光标位置,需要通过focus和blur跟踪判断当前是哪个el-input或el-select有焦点,当按键按下时,通过监听,计算下一个获取焦点元素的索引,通过focus方法将焦点切换至改元素。

秋思的博客 1350

wintab开发例程

 タブレットとスタイラスペンを使うと、パソコンに手書きの線を入力できます。筆圧を入力することができるので毛筆のような表現も可能です。ペンの傾きを入力できる機種もあり、アイデア次第で面白いことに使えそうです。  私は昔(94年頃)、WACOMのタブレットを用いたプログラム開発をしたことがあります。当初A3版ほどの大きさのUDというタブレットを使っていて、その後 ArtPad という小さいサイズの

grass168的专栏 3238

动态逆序对:CDQ分治

题目描述 对于序列A,它的逆序对数定义为满足i&lt;ji&lt;jiAi&gt;AjAi&gt;AjAi>Aj的数对(i,j)(i,j)(i,j)的个数。给111到nnn的一个排列,按照某种顺序依次删除mmm个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。 输入格式 输入第一行包含两个整数nnn和mmm,即初始元素的个数和删除的元素个数。以下n...

panjd123 371

自私兽群优化器(SHO)详解:从生物本能到智能优化

自私兽群优化器(SHO)是一种受动物群体自私行为启发的智能优化算法。该算法模拟动物在捕食威胁下的两种行为:聚集行为(全局搜索)和自私行为(局部搜索),将优化问题的解空间映射为生存环境,候选解视为猎物个体。SHO通过安全性评估将猎物分为安全、危险和高危三类,分别采用不同的位置更新策略,并引入捕食者角色增加选择压力。相比传统优化算法,SHO具有无需梯度信息、自适应平衡探索与开发、参数简单等优势,特别适合高维复杂和多模态优化问题。算法通过马尔可夫链理论保证收敛性,已在工程设计和数据挖掘等领域展现出良好性能。

qq_42212808的博客 196

[BZOJ3295][Cqoi2011]动态逆序对

[BZOJ3295][Cqoi2011]动态逆序对 树套树||CDQ分治 感觉树套树更好想啊,直接无脑减就行,然而我的树套树几个月之前就打出来了,现在还没调出来…… 还是CDQ好调,但是思路并不好想。我们把删除视作倒这插入,没有被删除的就视作最先插入的,于是每个操作就有了时间,位置,数值三元组,首先按时间排序,递归向下,然后在本层处理跨mid的情况:只考虑左区间对右区间的影响,至于...

weixin_30954607的博客 85

PCL RANSAC拟合分割多条直线【2026最新版】

使用RANSAC算法拟合分割多条直线,输出每一条直线的拟合参数到控制台,并保存直线点云到本地文件夹。博客长期更新,本文最新更新时间为:2026年5月24日。

点云侠的博客 7974

Windows部署小龙虾 OpenClaw 报错不断?参考这篇文章,轻松配置 OpenClaw 所需环境

想在Windows上部署OpenClaw却频频报错?🔧 本文详细梳理了OpenClaw部署必需环境的安装步骤和官方下载地址 📦,提供完整的验证清单和常见问题排查方法,帮你一次性搞定所有环境配置,顺利部署OpenClaw ✅

XiaoqiangClub的博客 361

BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组

BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删 除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数 Input 输入第一行包含两个整数n和m,即初始元素的个数和删除...

135

Unity零基础到入门 ☀️| 基础知识入门篇章,看完就可以做游戏啦! | 寻找C站宝藏

Unity入门基础知识。本篇文章介绍了关于Unity入门的一些基础知识,包括基本概念和使用实例。简单易上手,轻松实现Unity入门操作!

努力前行,总会成为自己心中的那道光 1万+

【BZOJ 3295】 [Cqoi2011]动态逆序对

CDQ分治+树状数组~

Regina8023 1339

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

bzoj3295【CQOI2011】动态逆序对

CDQ分治+树状数组

AaronPolaris 6140

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

bzoj 3295 [Cqoi2011]动态逆序对

CDQ分治+树状数组

我要吃熊猫 392

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【CQOI2011】【BZOJ3295】动态逆序对

Description 对于序列A,它的逆序对数定义为满足i<\ltj,且Ai>\gtAj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。 Input 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数。以下n行每行包含一个1到n之间的正整数,即初始排列。以下m行每行一个正整数,依次为每次删除的元素。

CreationAugust is 14 years old forever 1617

bzoj3295[Cqoi2011] 动态逆序对

题目链接:bzoj3295 题目大意: 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。 题解: cdq分治 当前的逆序对数=总逆序对数-含删除元素的逆序对数+删除元素序列中新增加的逆序对数(因为一个逆序对会被重...

213

【bzoj3295】[Cqoi2011]动态逆序对

题目描述: 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。 输入: 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数。以下n行每行包含一个1到n之间的正整数,即初始排列。以下m行每行一个正整数,依次为每次删除的元素。 ...

diaopinshuo4087的博客 120

BZOJ 3295 动态逆序对 CDQ分治

BZOJ 3295 动态逆序对 CDQ分治

世界 4601

BZOJ3295 CQOI2011 动态逆序对

3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2263  Solved: 721 [Submit][Status][Discuss] Description 对于序列A,它的逆序对数定义为满足ij,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任

毒液哥的专栏 1002

【bzoj3295 动态逆序对】

Description   对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。 Input   输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数。以下n行每行包含一个1到n之间的正整数,即初始排列。以下m行每行一...

203

【树套树】【XSY1952】【BZOJ3295】动态逆序对

\(Description\) 对于序列\(A\),它的逆序对数定义为满足\(i<j\),且\(A_{i}\)>\(A_{j}\)的数对\((i,j)\)的个数。给\(1\)到\(n\)的一个排列,按照某种顺序依次删除\(m\)个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。 \(Input\) 输入第一行包含两个整数\(n\)和\(m\),即初始元素的个数...

311

BZOJ3295: [Cqoi2011]动态逆序对

BZOJ3295删除好像挺麻烦的。。那就考虑倒一下,也就是倒序加值。 考虑一个值加入进来,对答案的影响就是,它左边的比它大的个数和它右边比它小的个数加和。 先只考虑一半。只考虑右边比它小的数的个数。那么假设当前加入的为一个三元组 (t,pos,x)(t,pos,x),表示时间,位置和值。那么就是求满足(tt<t,ppos>pos,xx<x)(tt<t,ppos>pos,xx<x)的三元组(tt

Heret1c 351
上一篇: POJ - 2104 K-th Number
下一篇: HDU - 5618 Jam's problem again
我不会额
博客等级 码龄11年 2粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值