zoukankan      html  css  js  c++  java
  • 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);
    }
    
  • 相关阅读:
    arm-linux-gcc-4.5.1的安装…
    OK6410之tftp下载内核,nfs…
    非常详细的ok6410的linux系统移植…
    2009-2010网络最热的&nbsp;嵌入式…
    Vue-基础(二)
    【SpringBoot】Springboot1.5.9整合WebSocket
    Hadoop本地环境安装
    Vue-基础(一)
    【Jwt】JSON Web Token
    【JDK8】Java8 新增BASE64加解密API
  • 原文地址:https://www.cnblogs.com/shikeyu/p/13700379.html
Copyright © 2011-2022 走看看