首页 > 其他分享 >P1966 [NOIP2013 提高组] 火柴排队做题笔记

P1966 [NOIP2013 提高组] 火柴排队做题笔记

时间:2022-09-03 10:01:00浏览次数:60  
标签:标号 排序 NOIP2013 int 笔记 100005 数组 return P1966

这题和 P5677 一样,是从树状数组题单里翻出来的,由于开始看时感觉题解代码写的不是很清晰,就先放进了做题计划里,后来几次看这道题,但由于第一次看题可能留下了一些心理阴影以及时间不多,一直没切掉。直到先去做了用树状数组求逆序对,才感觉这道题变得简单了不少。思路:用一个数组储存输入数组的标号,按对应数的大小对标号数组进行排序。然后把其中一个标号数组为关键字对另一个标号数组进行排序,被排序的标号数组排序后的逆序对数量即为答案。

#include <bits/stdc++.h>
  using namespace std;
#define int long long
const int MOD=1e8-3;
int n,a[100005],b[100005],c[100005],d[100005],t[100005],s[100005],ans;
bool cmp1(int u,int v)
{
//	if (a[u]==a[v]) return u>v;
	return a[u]<a[v];
}
bool cmp2(int u,int v)
{
//	if (b[u]==b[v]) return u>v;
	return b[u]<b[v];
}
void Add(int t)
{
	for (int j=t;j<=n;j+=j&(-j))
	{
		s[j]++;
		s[j]%=MOD;
	}
}
int getsum(int t)
{
	int ans=0;
	for (int j=t;j;j-=j&(-j))
	{
		ans+=s[j];
		ans%=MOD;
	}
	return ans;
}
signed main()
{
	ios::sync_with_stdio(0); cout.tie(nullptr);
	cin>>n;
	for (int i=1;i<=n;i++)
	{
		cin>>a[i];
		c[i]=i;
	}
	for (int i=1;i<=n;i++)
	{
		cin>>b[i];
		d[i]=i;
	}
	sort(c+1,c+n+1,cmp1);
	sort(d+1,d+n+1,cmp2);
	for (int i=1;i<=n;i++)
	{
		t[c[i]]=d[i];
	}
	for (int i=n;i>=1;i--)
	{
		ans+=getsum(t[i]-1);
		Add(t[i]);
		ans%=MOD;
	}
	cout<<ans<<endl;
	return 0;
}

标签:标号,排序,NOIP2013,int,笔记,100005,数组,return,P1966
From: https://www.cnblogs.com/Jason142/p/16652031.html

相关文章

  • Git笔记
    Git分布式版本控制工具1、Git概述Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。在IDEA开......
  • MybatisPlus笔记
    MyBatis-PlusMyBatis-Plus概述需要基础:学习过Spring、SpringMVC、Mybatis为什么要学习它呢?MyBatisPlus可以节省我们大量的工作时间,所有的CRUD代码都可以自动化完成!JPA......
  • MySQL笔记
    MySQL笔记1、MySQL简介MySQL是由瑞典的MySQLAB公司开发的,目前是Oracle(甲骨文)公司的一个关系型数据库产品(2008年MySQLAB被Sun公司收购、2009年Sun公司又被Or......
  • MybatisPlus笔记
    MyBatis-PlusMyBatis-Plus概述需要基础:学习过Spring、SpringMVC、Mybatis为什么要学习它呢?MyBatisPlus可以节省我们大量的工作时间,所有的CRUD代码都可以自动化完成!JPA......
  • MySQL笔记
    MySQL笔记1、MySQL简介MySQL是由瑞典的MySQLAB公司开发的,目前是Oracle(甲骨文)公司的一个关系型数据库产品(2008年MySQLAB被Sun公司收购、2009年Sun公司又被Or......
  • Git笔记
    Git分布式版本控制工具1、Git概述Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。在IDEA开......
  • SpringMVC笔记
    SpringMVC框架1、回顾MVC1.1、什么是MVCMVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。是将业务逻辑、数据、显示分离的方法来组织代......
  • Mybatis笔记
    Mybatis1、Mybatis简介1.1什么是Mybatis如何获得Mybatismaven仓库:<!--https://mvnrepository.com/artifact/org.mybatis/mybatis-->    <dependency> ......
  • 树状数组学习笔记
    ​ 一:树状数组定义望文生义,树状数组就是用树形结构来模拟数组的一种数据结构。二:图解(纯手绘,难看勿喷)​编辑C表示从1-k的和,C[1]=a[1]C[2]=C[1]+a[2]C[3]=a[3]C[......
  • 2022-09-02 第四小组 王星苹 学习笔记
    学习心得在浏览器禁用cookie的情况下,HTTPSession仍可以用于会话管理机制转发调用的是HttpServletRequest对象中的方法转发时浏览器只请求一次服务器。重定向时,浏览器中......