题目


分析

首先一列的数不会发生变化,只是交换列,

并且交换列的时候奇数列变成偶数列取反,

偶数列变成奇数列取反,考虑直接将偶数列全部取反,

那只需要交换列就可以了,奇数列交换到偶数列会取反,

奇数列交换到奇数列不变;偶数列同理

如果将上下两行看成一个整体,通过初始状态给目标状态的每一列重新编号,

那就变成了经典的逆序对问题,

不过首先要判断上下两行是否双射,这可以采用哈希,

当然由于数字比较小,直接用个桶就行了,但我不改了(mapTLE了)


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
typedef long long lll;
const int N=1000011,p=1500007;
lll ans,a[3][N],b[3][N]; int n,c[N],A[N];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline lll query(int x){
rr lll ans=0;
for (;x;x-=-x&x) ans+=c[x];
return ans;
}
inline void update(int x,int y){
for (;x<=n;x+=-x&x) c[x]+=y;
}
struct hash{
struct node{int y; lll w; int next;}e[p]; int hs[p],tot;
inline void add(int x,lll w){e[++tot]=(node){x,w,hs[w%p]},hs[w%p]=tot;}
inline signed locate(lll x){
for (rr int j=hs[x%p];j;j=e[j].next)
if (e[j].w==x) return e[j].y;
return -1;
}
}h;
signed main(){
n=iut();
for (rr int i=1;i<=n;++i) a[1][i]=iut();
for (rr int i=1;i<=n;++i) a[2][i]=iut();
for (rr int i=1;i<=n;++i) b[1][i]=iut();
for (rr int i=1;i<=n;++i) b[2][i]=iut();
for (rr int i=2;i<=n;i+=2)
swap(a[1][i],a[2][i]),swap(b[1][i],b[2][i]);
for (rr int i=1;i<=n;++i) a[0][i]=a[1][i]<<30|a[2][i];
for (rr int i=1;i<=n;++i) b[0][i]=b[1][i]<<30|b[2][i];
for (rr int i=1;i<=n;++i) h.add(i,a[0][i]);
for (rr int i=1,t;i<=n;++i)
if (~(t=h.locate(b[0][i]))) A[i]=t;
else return !printf("dldsgay!!1");
for (rr int i=n;i;--i)
ans+=query(A[i]-1),update(A[i],1);
return !printf("%lld",ans);
}

#树状数组,哈希#洛谷 6687 论如何玩转 Excel 表格的更多相关文章

  1. 二维树状数组总结&&【洛谷P4514】 上帝造题的七分钟

    P4514 上帝造题的七分钟 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了00的n×mn×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b)(a,b),右下 ...

  2. BZOJ2124 等差子序列(树状数组+哈希)

    容易想到一种暴力的做法:枚举中间的位置,设该位置权值为x,如果其两边存在权值关于x对称即合法. 问题是如何快速寻找这个东西是否存在.考虑仅将该位置左边出现的权值标1.那么若在值域上若关于x对称的两权值 ...

  3. hdu 4715 Difference Between Primes(素数筛选+树状数组哈希剪枝)

    http://acm.hdu.edu.cn/showproblem.php?pid=4715 [code]: #include <iostream> #include <cstdio ...

  4. [USACO17JAN] 晋升者计数 dfs序+树状数组

    [USACO17JAN] 晋升者计数 dfs序+树状数组 题面 洛谷P3605 题意:一棵有点权的树,找出树中所有\((u,v)\)的对数,其中\(u,v\)满足\(val(u)\le val(v)\ ...

  5. [luogu] P4514 上帝造题的七分钟 (树状数组,二维差分)

    P4514 上帝造题的七分钟 题目背景 裸体就意味着身体. 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a ...

  6. 洛谷P2617 Dynamic Ranking(主席树,树套树,树状数组)

    洛谷题目传送门 YCB巨佬对此题有详细的讲解.%YCB%请点这里 思路分析 不能套用静态主席树的方法了.因为的\(N\)个线段树相互纠缠,一旦改了一个点,整个主席树统统都要改一遍...... 话说我真 ...

  7. [洛谷P1198/BZOJ1012][JSOI2008] 最大数 - 树状数组/线段树?

    其实已经学了树状数组和线段树,然而懒得做题,所以至今没写多少博客 Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数 ...

  8. 洛谷P3655 差分数组 树状数组

    题目链接:https://www.luogu.org/problemnew/show/P3655 不一定对,仅供参考,不喜勿喷,不喜勿喷. 先copy洛谷P3368 [模板]树状数组 2 题解里面一位 ...

  9. 洛谷P5069 [Ynoi2015]纵使日薄西山(树状数组,set)

    洛谷题目传送门 一血祭 向dllxl致敬! 算是YNOI中比较清新的吧,毕竟代码只有1.25k. 首先我们对着题意模拟,寻找一些思路. 每次选了一个最大的数后,它和它周围两个数都要减一.这样无论如何, ...

  10. BZOJ3262/洛谷P3810 陌上花开 分治 三维偏序 树状数组

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672131.html 题目传送门 - BZOJ3262 题目传送门 - 洛谷P3810 题意 有$n$个元素,第 ...

随机推荐

  1. jupyter notebook更改默认工作目录

    jupyter notebook默认配置路径:C:\Users\Administrator\.jupyter\jupyter_notebook_config.py 如果找不到配置文件,可以生成一个 j ...

  2. 【LeetCode哈希表】前k个高频词,利用哈希表+vector进行排序操作

    前k个高频词 https://leetcode.cn/problems/top-k-frequent-words/ 给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词. ...

  3. 一次生产环境OOM排查

    一.背景 前几天下午飞书告警群里报起了java.lang.OutOfMemoryError: unable to create new native thread告警,看见后艾特了对应的项目负责人但是 ...

  4. 【苹果】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本

    前言 缘由 Iphone15来了,两年之约你还记得吗? 遂整合之前iphone13及iphone14的相关抢购代码,完成一个SpringBoot监听Iphone15有货邮件提醒+python自动化脚本 ...

  5. C语言之兔子生产问题

    /#include <stdio.h> main() { long fib1 = 1, fib2 = 1, fib;//定义长整型变量,fib1表示当前前一个月的兔子数,fib2表示当前前 ...

  6. MySQL之过滤条件

    [一]筛选过滤条件 [1]查询语句 -- 查询当前表中的指定字段的数据 select id,name from emp where id > 3; [2]创建数据表 create databas ...

  7. dev-sidecar 让github 可以正常访问

    dev-sidecar https://gitee.com/docmirror/dev-sidecar/releases

  8. git 提交本地仓库 提交错误撤销命令

    git reset --hard HEAD~1

  9. 用户不在 sudoers 文件中。此事将被报告

    在终端,进入root模式 vim /etc/sudoers 在    sudo (ALL:ALL) ALL下 添加 用户名 (ALL:ALL) ALL

  10. matlab在mac下无写权限解决方法和思路

    问题出在哪儿?   做音频算法很多年,使用matlab的历史也是十年多了,可是在mac下使用matlab倒是第一次,基本熟悉了之后,顺杆丝滑啊.要比在windows下好用多了,不过,中间遇到了一些问题 ...