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

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

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

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

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

逗逼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\n", maxs);
return 0;
}

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

最新文章

  1. 一次失败的Selenium chromedriver切换
  2. 【POJ】3678 Katu Puzzle
  3. OpenGl从零开始之坐标变换(下)
  4. 利用ddmlib 实现 PC端与android手机端adb forword socket通信(转)
  5. 相似元素存在的意义---HTML&amp;CSS
  6. vc静态加载dll和动态加载dll
  7. 读写UTF-8、Unicode文件(加上了文件头,貌似挺好用)
  8. BZOJ 1571: [Usaco2009 Open]滑雪课Ski
  9. java的占位符
  10. 如何判断是REQUEST请求是来自移动终端还是来自PC端
  11. google自定义站内搜索
  12. Method Swizzle黑魔法,修改 ios 系统类库方法 SEL IMP
  13. 从浅入深剖析angular表单验证
  14. 一名合格的Web安全工程师之成长路径
  15. C. K-Dominant Character
  16. 使用Zabbix服务端本地邮箱账号发送报警邮件及指定报警邮件操作记录
  17. Tuxedo低版本客户端(Tuxedo 9)连接到高版本Tuxedo服务端(Tuxedo 12.1.3)的问题
  18. vue封装第三方插件并发布到npm
  19. Python深入:Distutils发布Python模块--转载
  20. Java单播、广播、多播(组播)

热门文章

  1. Bootstrap3.0学习第十四轮(分页、徽章)
  2. angular-input
  3. Jquery实现异步上传图片
  4. jsonp与跨域
  5. java、java -version 可以javac没有内部命令的问题
  6. iOS边练边学--iOS中的json数据解析
  7. poj1509 最小表示法
  8. Maven-在eclipse创建maven项目
  9. 【Matplotlib】设置刻度(1)
  10. bzoj 1493 暴力