• BZOJ 3540 realtime-update 解题


    分析一下题意,大约是给定一串牛,然后找到一个跨越距离最长的牛子串使得在这个范围内白牛和花牛一样多. 白牛可以任意涂成花牛.

    既然"白牛可以任意涂成花牛",那么我们需要找到一个最长的子串使得长度为偶且白牛数>=花牛.

    注意这里的"最长"不指元素个数最多.

    按照牛们排个序,那么就在一条线上了.

    然后...细节明天想吧.

    逗逼ZBT来更新啦!

    有一种好猎奇的感觉呢!

    用和临洮巨人一样的办法,用前缀和差优化那么

    让我们(比如说)用

    a[i]表示TOTAL{ select (* is white) in cow[0...i] }
    b[i]表示TOTAL{ select (* is spotted) in cow[0...i] }

    那么让我们用

    c[i] = (foreach i in a,b[i]) a[i]-b[i]

    这时一个符合条件的区间(r,l]即是

    ( odd(r) == odd(l) ) && c[l]-c[r]>=0 //P党很熟悉的odd函数,定义为 odd(i)=i&1
    //为什么c[l]-c[r]>=0?
    --------------------
    c[l]-c[r] >= 0 ->
    a[l]-b[l]-(a[r]-b[r]) = a[l]-b[l]-a[r]+b[r] = ( a[l]-a[r] ) - ( b[l]-b[r] )
    也就是在这个范围内白牛比花牛多(由于是闭区间,省去了r-1的麻烦)

    那么如何动态查找第一个c值小于当前结点的结点呢?

    中国山东找蓝翔我们可以先记录下所有c值等于固定值中最小的那个,然后扫描一遍(同样是前缀和思想)可以实现c值小于等于这个的最小..然后再动态更新范围即可..

    hash函数直接+=200000.

    #include "cstdio"
    #include "algorithm"
    #include "cstring"
    struct cow{
    	bool c;
    	int pos;
    } cows[200000];
    bool cmp(cow a,cow b){
    	return a.pos<b.pos;
    }
    inline int min(int a,int b){
    	return a<b?a:b;
    }
    int n,i,a,b,t,tt,maxs;
    int f[500000];
    char pt;
    int main(int argc, char const *argv[]){
    	scanf("%d",&n);
    	for(i=1;i<=n;++i){
    		scanf("%d %c",&a,&pt);
    		cows[i].pos=a;
    		cows[i].c=(pt=='W');
    	}
    	std::sort(cows+1,cows+n+1,cmp);
    	memset(f,1,sizeof f);
    	a=200000;b=0;
    	f[200000]=0;
    	for(i=1;i<=n;++i){
    		if(cows[i].c) ++a; else ++b;
    		t=i&1,tt=a-b;
    		if(f[tt]>200000){
    			f[tt]=min(i,f[tt-2]);
    		}else{
    			f[tt]=min(f[tt],f[tt-2]);
    		}
    		if(cows[i].pos-cows[f[tt]+1].pos > maxs) maxs = cows[i].pos - cows[f[tt]+1].pos;
    	}
    	printf("%d
    ", maxs);
    	return 0;
    }
    

    恩..两个点过不去..再说吧..

  • 相关阅读:
    MongoDB 安装及其配置
    hdu 1241 Oil Deposits
    2014ACM/ICPC亚洲区北京站
    hdu 5901 count prime & code vs 3223 素数密度
    hdu 2191 珍惜现在,感恩生活
    FOJ 2181 快来买肉松饼
    hdu 5384 Danganronpa
    hdu 2222 Keywords Search
    hdu 1300 Pearls
    2016.2.24. 《构建之法》开始阅读
  • 原文地址:https://www.cnblogs.com/tmzbot/p/4027778.html
Copyright © 2020-2023  润新知