。果然没有题解做题感觉是不一样的。

这个F题可能是最像往常B题的题了(往常B题就是dp,还一般都不难

首先这个是|,所以|的数越多,它一定是不降的

那么合法的一定是一个数到一个数往后的数所构成的所有区间

那么不停地往后|,直到>其中最大的一个值就可以了,但最大值是随|不断变化的,那最大值是多少?

这时可以考虑枚举(化动为静的思想),,当前作为最大值的区间最大是多少(单调栈,前几天刚做过)

然后剩下的就是在左右区间各找一个位置,使 |和 >枚举的最大值

显然其他数位数不可能比最大值大,不然他就成为最大值了

所以考虑把最大值按位取反,然后&这个最大值>0的第一个出现的数

&>0只有最大值这一位是0,而有一个数这一位是1时出现

所以可以用线段树维护这一位是1的最左边的位置和最右边的位置,分别取max和min

因为具体数字满足几个要求无所谓,所以可以直接按位离散,

但线段树会爆空间,所以可以用dp求

f【这个数是啥】【二进制位】=最靠右的位置

g【这个数是啥】【二进制位】=最靠左的位置

半个插数dp。。

然后要注意,数字相同的区间也要算一个,所以可以往后算,

码:

#include<iostream>
#include<cstdio>
using namespace std;
#define zzzz o<<1,l,mid
#define yyyy o<<1|1,mid+1,r
#define N  200005
#define ll long long
int zz[N*32],zy[N*32],c,a,b,er[35],top,n,op,aa[N],sta[N],tong[35],f[N][35],g[N][35],lin[N];
ll zuo[N],you[N],ans,i,j;
bool nozuizuo[N];
int main()
{scanf("%d",&n);er[0]=1;for(i=1;i<=30;i++)er[i]=er[i-1]*2;for(i=1;i<=n;i++){scanf("%d",&aa[i]);}top=0;for(i=1;i<=n;i++){zuo[i]=1;while(top&&aa[sta[top]]<aa[i])zuo[i]+=zuo[sta[top]],top--;sta[++top]=i;   }top=0;for(i=n;i>=1;i--){you[i]=1;while(top&&aa[sta[top]]<aa[i])you[i]+=you[sta[top]],top--;if(aa[sta[top]]==aa[i])nozuizuo[sta[a]]=1;   sta[++top]=i;    }top=0;for(i=n;i>=1;i--){lin[i]=1;while(top&&aa[sta[top]]<=aa[i])lin[i]+=you[sta[top]],top--;if(nozuizuo[i]!=1)you[i]=lin[i];    sta[++top]=i;    }for(i=1;i<=n;i++){      for(j=0;j<=30;j++){f[i][j]=tong[j];                 }       for(j=0;j<=30;j++){if(er[j]&aa[i])tong[j]=i;                        }}for(i=0;i<=30;i++)tong[i]=9999999;for(i=n;i>=1;i--){     for(j=0;j<=30;j++){g[i][j]=tong[j];                 }       for(j=0;j<=30;j++){if(er[j]&aa[i])tong[j]=i;                        }}for(i=1;i<=n;i++){    int lin=aa[i],o=0,j=0;    ll l1=0,l2=9999999;while(lin){if(!(lin&1)){if(f[i][j]>=i-zuo[i]+1)l1=max(f[i][j],int(l1));  if(g[i][j]<=you[i]+i-1)l2=min(g[i][j],int(l2));                       }
lin/=2;
++j;}
if(l1!=0&&l2!=9999999)
{ans+=(l1-(i-zuo[i]+1)+1)*(you[i]);ans+=(i-l1)*((you[i]+i-1)-l2+1);
}
if(l1!=0&&l2==9999999)
{ans+=(l1-(i-zuo[i]+1)+1)*(you[i]);
}
if(l1==0&&l2!=9999999)
{ans+=zuo[i]*((i+you[i]-1)-l2+1);
}
}
printf("%I64d",ans);
}

2017.10.17 CF#441 F题 思考记录相关推荐

  1. 2017.10.7 最长上升子序列 思考记录

    由于他添加的数字单调上升,所以答案只会在插入的那个数的f值上更新.. 由于之前插入的数都比这个数小,所以直接找区间f最大值.. 这题splay比上个play题好写太多了 不调不试1A  splay辣 ...

  2. 2017.4.22 hankson的趣味题 思考记录

    这个题非常的不容易 ,第一遍交爆零了 首先根据最大公约数和最小公倍数可知: 这个数x一定包含a1的所有质因数 这个数x一定不包含a0/a1的所有质因数 这个数一定包含b1/b0的所有质因数 这个数可能 ...

  3. 2017.10.8 球形空间产生器sphere 思考记录

    圆心上的点到各点之间的距离相等,所以根据距离公式  sqrt (  (x-x1)^2  +(y-y1)^2 + (z-z1)^2)  可以由相邻两个式子列等式拆平方得到一元一次方程 然后消元求方程的解 ...

  4. 2017.10.17 蜘蛛难题 思考记录

    强烈建议不要做此题,此题描述差到极点!毒瘤出题人 首先有想法就是从起点往后按照出水管依次满足,但多个水域需要合起来求下一个最低出水口,所以并不是很好维护 所以最好按照时间模拟 先求出当前状态下的最低水 ...

  5. 2017.5.28 codeforce h题思考记录

    并没有报codeforce  但有人想让我帮他看题,于是就做了 大概意思就是,给你200个空,让你在200个空中放字母,   再自己设计一个串,要求自己设计的这个串在这放着200个字母的串中作为子串出 ...

  6. 2017.10.17 Codechef MARCH14 GERALD07加强版 失败总结

    以前做这个题简直是噩梦的难度 有个很神的做法就是 利用最简联通形式来统计联通块 把一个要求的区间写成一颗等价的树,,就有了统一的标准 然后考虑怎么构造这棵树,看每次加入的边,如果已经联通,则考虑把这个 ...

  7. 2017.10.10 狼和羊的故事 思考记录

    二集合划分问题,,花费最小,果断最小割 首先狼和羊可能会被分割,所以不能直接在原图上跑 所以可以考虑羊向狼建边,,但流量是受图的限制的,所以把0也考虑进来,一次只向相邻的一格连边 直接跑dinic即可 ...

  8. 2017.3.6~2017.3.7 Harry And Magic Box 思考记录(特别不容易)

    英文题,看翻译做 看到这个题竟然一下找到了思路:    组合数+容斥:: 但是容斥不太懂 好像要做这个题必须先推容斥.... 试一试吧. 然并卵,花了一个晚上,还是求不出来. 根据题目的重复关系,确实 ...

  9. usaco题思考记录

    1. 修理牛棚 Barn Repair 思路:反向,枚举所有间隔,从大到小排序,依次+板子不填它,直到板子数够了为止,拿总长去减::: 结论:逆向思维. 2.丢失的牛 思路:BFS::: 结论:有后效 ...

最新文章

  1. 技术以外的功夫 ----作者:李天平
  2. js读取外部json指定字段值完整代码_前端工程化 剖析npm的包管理机制(完整版)...
  3. Yii2语言国际化配置
  4. javascript学习随笔(编写浏览器脚本 Navigator Scripting )
  5. 用Word2007写Blog
  6. OpenStack KVM环境搭建
  7. 基于麻雀搜索算法的极限学习机(ELM)分类算法-附代码
  8. python写算法注册机_用python 写 Atlantis Word Processor 注册机
  9. 2008年顶尖 Web 设计师访谈
  10. 软文推广丨什么是软文推广?
  11. windows检查磁盘命令
  12. python使用代理ip访问网站_python使用代理ip访问网站的实例
  13. reviewer中文_中文审稿意见怎么写
  14. (转载)关于C#的fixed
  15. 物联网平台 ThingsBoard 3.3 发布
  16. 如何建立用户之间的邀请关系 / 邀请注册机制
  17. 如何用 js 获取虚拟键盘高度?(适用所有平台)
  18. 南昌大学 计算机面试题,南昌大学计算机应用技术专业调剂生复试经验
  19. Python的注释快捷键方法
  20. 计算机专业同济大学和华科,学计算机专业是去华中科技大学还是同济大学好?学霸教你选择...

热门文章

  1. MATLAB二维数组的创建与元素提取
  2. 再谈注意力机制 | 运用强化学习实现目标特征提取
  3. WORD如何设置第X页,共Y页页码设置?
  4. wepy小程序分包的版本
  5. jQuery学习之五---效果
  6. 邮件服务器收件人数量限制,Exchange限制每封邮件的收件人数
  7. linux增加 inode空间,linux 增加inode 的方法
  8. python中嵌套函数的应用实例-实例详解python函数的对象、函数嵌套、名称空间和作用域...
  9. mysql原子性和乐观锁_乐观锁 VS 悲观锁
  10. php上老师查看作业,请老师查阅俺的作业效果,看还满意不