• 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;
    }
    

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

  • 相关阅读:
    CF1394A Boboniu Chats with Du 题解
    P3377 【模板】左偏树(可并堆)题解
    P2152 [SDOI2009]SuperGCD 题解
    在其他模块中调用代码
    教程:创建Go模块
    Go入门
    反悔贪心
    codeforces 1569 E. Playoff Restoration (meet-in-the-middle)
    codeforces 1036 F. Relatively Prime Powers (容斥+精度处理+大数边界处理)
    icpc沈阳2020 H. The Boomsday Project (dp+二分)
  • 原文地址:https://www.cnblogs.com/tmzbot/p/4027778.html
Copyright © 2020-2023  润新知