囧== 下面的做法是错误的。下午在路上突然明白了==

哎,到现在还是只知道暴力的做法,囧爆了:http://www.cnblogs.com/liuxueyang/p/3322197.html

类似于前序和的那种思想。

b数组代表前序或,c数组代表后序或。

O(N)预处理出数组b和数组c

在从前往后扫一遍O(N)的复杂度,求出ans

如图:

可以发现c[Head] & b[Tail] 就可以求出任意区间内的f(Head, Tail),可以知道,整个数组里面每个元素进入区间一次,出去一次,所以是O(N)的复杂度。

就这么欢乐地解决了==

 #include <cstdio>
 #include <cstring>
 +;
 int a[N], b[N], c[N];
 int main(void)
 {
   #ifndef ONLINE_JUDGE
   freopen("in.txt", "r", stdin);
   #endif // ONLINE_JUDGE
     int t; scanf("%d", &t);
     ; i <= t; ++i)
     {
         printf("Case #%d: ", i);
         int j, n, m; scanf("%d%d", &n, &m);
         memset(b, , sizeof(b));
         memset(c, , sizeof(c));
         ;
         ; j <= n; ++j) {
             scanf("%d", a+j);
             b[j] = b[j-] | a[j];
         }
         ; --j) {
             c[j] = c[j+] | a[j];
         }
         , Tail = ;
         while (Head <= n && Tail <= n) {
           int tmp = c[Head] & b[Tail];
           while (tmp < m && Tail <= n) {
             ans++; tmp = c[Head] & b[++Tail];
           }
           ++Head; Tail = Head;
         }
         printf("%I64d\n", ans);
     }

     ;
 }

其实正确的做法应该是这样的:

 #include <cstdio>
 #include <cstring>
 typedef long long int LL;
 +;
 ], cnt[];
 int main(void) {
 #ifndef ONLINE_JUDGE
     freopen("in.txt", "r", stdin);
 #endif
     int t; scanf("%d", &t);
     memset(dig, , sizeof(dig));
     dig[] = ;
     ; i <= ; ++i) dig[i] = dig[i-] * ;
     ; i <= t; ++i) {
         printf("Case #%d: ", i);
         , Tail = , n, m, j, k;
         scanf("%d%d", &n, &m);
         LL sum = (LL)n * (n+) / , tmp, nosum = ;
         memset(cnt, , sizeof(cnt));
         ; j < n; scanf("%d", a+j++));
         while (Tail < n) {
             tmp = ;
             ; j <= ; ++j)
                 if (dig[j] & a[Tail])
                     ++cnt[j];
             ; j <= ; ++j)
                 if (cnt[j])
                     tmp += dig[j];
             if (tmp >= m) {
                 k = Head;
                 while (tmp >= m) {
                     tmp = ;
                     ; j <= ; ++j)
                         if (dig[j] & a[Head])
                             --cnt[j];
                     ; j <= ; ++j)
                         if (cnt[j])
                             tmp += dig[j];
                     ++Head;
                 }
                 nosum += (LL)(n - Tail) * (Head - k);
             }
             ++Tail;
         }
         printf("%I64d\n", sum - nosum);
     }
     ;
 }

一定要记得强制类型转换!!!18行的那种。纠结了一晚上==

嗨,中村。

hdu4737 A Bit Fun ——O(n)做法、错误的做法 + 正确做法的更多相关文章

  1. 遍历List过程中删除元素的正确做法(转)

    遍历List过程中删除元素的正确做法   public class ListRemoveTest {     3 public static void main(String[] args) { 4 ...

  2. SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确

    最近在查询SQL时遇到SQL文件错误,可能是文件数据已损坏.解决过程分享给大家. 问题描述 消息 824,级别 24,状态 2,第 1 行SQL Server 检测到基于一致性的逻辑 I/O 错误 p ...

  3. SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:1772,但实际为 0:0)。在文件 'D:\Program Files\Microsoft SQL Ser

    SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:1772,但实际为 0:0).在文件 'D:\Program Files\Microsoft SQL Ser ...

  4. 这才是Android设置界面的正确做法👌👌👌

    话不多说,先上效果图 本文参考简书博客:<这才是Android设置界面的正确做法>一文写成,在其基础上删改并增加了一些内容.建议新窗口打开原文,在本文讲述不清楚的地方参考原文去寻找答案. ...

  5. SQL Server附加数据库出现错误5123的正确解决方法

    因为自己有一本基于SQL Server 2005的数据库教程,里边使用的示例数据库是AdventureWorks for SQL Server 2005,而我的机子上装的是SQL Server 200 ...

  6. 项目系统Netty的Channel和用户之间的关系绑定正确做法,以及Channel通道的安全性方案

    前言 考虑一个功能业务,在web程序中向指定的某个用户进行实时通讯 在Web运用的Socket通讯功能中(如在线客服),为保证点对点通讯.而这个看似简单的根据用户寻到起channel通道实际会碰到不少 ...

  7. SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确 ||尝试在数据库 5 中提取逻辑页 (1:1640) 失败

    use test go ALTER DATABASE test SET SINGLE_USER DBCC CHECKDB (test, repair_allow_data_loss) with NO_ ...

  8. Web Api 中返回JSON的正确做法

    在使用Web Api的时候,有时候只想返回JSON:实现这一功能有多种方法,本文提供两种方式,一种传统的,一种作者认为是正确的方法. JSON in Web API – the formatter b ...

  9. win10更新时遇到错误0x80070002的正确处理方法

    win10更新Flash Player.或者在  “启用或关闭windows功能” 经常出现提示错误0x80070002,这要怎么解决呢?这里介绍下正确的错误代码0x80070002解决办法. 严肃提 ...

随机推荐

  1. [资源] Open source packages on SLAM

    OpenSLAM http://openslam.org/ Most main stream open source slam resource can be found on OpenSLAM, w ...

  2. viewport和media query

    viewport: 你可以定义viewport的宽度.如果你不使用width=device-width,在移动端上你的页面延伸会超过视窗布局的宽度(width=980px),如果你使用了width=d ...

  3. 深入浅出设计模式——命令模式(Command Pattern)

    模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请 ...

  4. 响应式 css

    1.class 样式一般用class,命名:中横线分隔,如:div-logo id 一般用于js快速地区别和获取元素,命名:驼峰命名法,如:divLogo (中间首字母大写) 2.必不可少的图片,用& ...

  5. ReentRantLock使用

    synchronized原语和ReentrantLock在一般情况下没有什么区别,但是在非常复杂的同步应用中,请考虑使用ReentrantLock,特别是遇到下面2种需求的时候. 1.某个线程在等待一 ...

  6. spark standalone模式单节点启动多个executor

    以前为了在一台机器上启动多个executor都是通过instance多个worker来实现的,因为standalone模式默认在一台worker上启动一个executor,造成了很大的不便利,并且会造 ...

  7. vs2012中VC连接mysql

    在MySQL的安装目录下你会找到include和lib文件夹(完全安装模式下),里面分别是C接口的头文件和库文件,库文件只用libmysql.lib就好了,即把libmysql.lib拷贝到了VC++ ...

  8. js调用父窗口中的方法

    window.open调用父窗口中的方法 回调函数: function fun9(ex){ alert(ex); } 调用语句: window.open("RoomSelecter.htm? ...

  9. hdu 5877/ 2016 ACM/ICPC Dalian Online 1010 Weak Pair

    题目链接 分析:树上的节点祖先与儿子的关系,一般就会想到dfs序.正解就是对树先进行dfs序排列,再将问题转化到树状数组统计个数.应该把节点按照权值从大到小排序,这样对于,就是从小到大的顺序.这样更新 ...

  10. 关于BS响应式的网站建设

    一.首先是导航 html部分: <!-- 导航 --> <nav class="navbar navbar-default navbar-fixed-top"&g ...