• P6687


    对于数组(a[i]),在其值域建立一个树状数组,每有一个(a[i])(tre[a[i]])(++)

    倒叙扫描每个(a[i]),把其加入树状数组

    数据大的话离散化

    for(int i = 1;i <= n;++i){
        ans += ask(a[i]-1);
        add(a[i],1);
    }
    

    旋转(180)(2*2)矩阵

    1 2       4 3
    3 4  -->  2 1
    

    列的对应是不变的,match一下

    黑白染色

    img

    黑色格子可以相互到达,白色格子可以相互到达于是我们可以在操作前先判断一下开始到结束的同伴有没有变,黑色格子里的数是否还在黑格子里,白色格子的数是否还在白格子里,然后我们就将问题转换为了交换相邻两列格子,问最少多少步到目标状态,再判一下染色对不对

    把每一列格子抽象成一个编号,目标状态抽象成给你(1sim n)的升序序列,最初始状态抽象成每列给子在目标状态下对应的编号,整道题相当于给你一个(1sim n)的无序序列,求逆序对数

    树状数组解决

    #include<cstdio>
    #define N 1000005
    using namespace std;
    int n,a[3][N],b[3][N],match[N<<1],col[N<<1],c[N],tr[N],num[N];
    long long ans;
    inline void add(int x,int z) {for(;x <= n;x += x&-x) tr[x] += z;}
    inline int sum(int x) {int res = 0;for(;x;x -= x&-x) res += tr[x];return res;}
    int main(){
    	scanf("%d",&n);
    	for(int i = 1;i <= 2;++i)
    		for(int j = 1;j <= n;++j)
    			scanf("%d",&a[i][j]);
    	for(int i = 1;i <= 2;++i)
    		for(int j = 1;j <= n;++j)
    			scanf("%d",&b[i][j]);
    	for(int i = 1;i <= n;++i) 
    		match[a[1][i]] = a[2][i],match[a[2][i]] = a[1][i];
    	for(int i = 1;i <= n;++i)
    		if(match[b[1][i]] != b[2][i]){
    			puts("dldsgay!!1"); return 0;
    		}
    	for(int i = 1;i <= 2;++i)
    		for(int j = 1;j <= n;++j)
    			col[a[i][j]] = (i + j) & 1;
    	for(int i = 1;i <= 2;++i)
    		for(int j = 1;j <= n;++j)
    			if(col[b[i][j]] != ((i + j) & 1)){
    				puts("dldsgay!!1"); return 0;
    			}
    	for(int i = 1;i <= n;++i)
    		c[b[1][i]] = i,c[b[2][i]] = i;
    	for(int i = 1;i <= n;++i) num[i] = c[a[1][i]];
    	for(int i = 1;i <= n;++i){
    		ans += sum(n) - sum(num[i]);
    		add(num[i],1);
    	}
    	printf("%lld
    ",ans);
    }
    
  • 相关阅读:
    C++ 多线程编程
    协程简介(coroutine)
    Yanhua Digimaster 3如何使用免焊适配器重置仪表板?
    Autel OTOFIX IM1 远程/在线技术支持指南
    Xhorse奥迪免焊适配器套装功能列表+常见问题
    如何通过 DDD 构建一辆汽车
    周末复习一波Linux,Linux常用命令总结,还有语法+案例
    Dubbo 基础知识
    GIT版本控制学习博客
    C++检测和定位内存泄漏
  • 原文地址:https://www.cnblogs.com/shikeyu/p/13700379.html
Copyright © 2020-2023  润新知