当前位置: 首页 > news >正文

洛谷P3674 小清新人渣的本愿

题意:多次询问,区间内是否存在两个数,使得它们的和为x,差为x,积为x。

n,m,V <= 100000

解:

毒瘤bitset......

假如我们有询问区间的一个桶,那么我们就可以做到O(n)枚举查找了。

然后我们用bitset优化一下......外面套上莫队来维护桶。

具体来说,差为x可以写成 a - b = x

然后我们把bitset左移/右移x位,与原来的and一下,看是否有元素为1即可。

和为x可以写成 a + b = x   N - a - b = N - x   (N - a) - b = N - x

这启示我们维护一个N - x的反桶,然后把反桶右移N - x位与原桶and。

关于积,直接n0.5暴力即可。

  1 #include <cstdio>
  2 #include <bitset>
  3 #include <cmath>
  4 #include <algorithm>
  5 
  6 const int N = 100010;
  7 
  8 int fr[N], a[N], bin[N];
  9 std::bitset<N> bs, bs2, tp;
 10 
 11 struct ASK {
 12     int f, l, r, x, t, ans;
 13     inline bool operator <(const ASK &w) const {
 14         if(fr[l] != fr[w.l]) {
 15             return l < w.l;
 16         }
 17         return r < w.r;
 18     }
 19 }ask[N];
 20 
 21 inline bool cmp(const ASK &A, const ASK &B) {
 22     return A.t < B.t;
 23 }
 24 
 25 inline void add(int x) {
 26     if(!bin[a[x]]) {
 27         bs.set(a[x]);
 28         bs2.set(N - a[x]);
 29     }
 30     bin[a[x]]++;
 31     return;
 32 }
 33 
 34 inline void del(int x) {
 35     bin[a[x]]--;
 36     if(!bin[a[x]]) {
 37         bs.reset(a[x]);
 38         bs2.reset(N - a[x]);
 39     }
 40     return;
 41 }
 42 
 43 int main() {
 44     int n, m;
 45     scanf("%d%d", &n, &m);
 46     int T = sqrt(n);
 47     for(int i = 1; i <= n; i++) {
 48         scanf("%d", &a[i]);
 49         fr[i] = (i - 1) / T + 1;
 50     }
 51     for(int i = 1; i <= m; i++) {
 52         scanf("%d%d%d%d", &ask[i].f, &ask[i].l, &ask[i].r, &ask[i].x);
 53         ask[i].t = i;
 54     }
 55     std::sort(ask + 1, ask + m + 1);
 56 
 57     int l = 1, r = 1;
 58     bin[a[1]]++;
 59     bs.set(a[1]);
 60     bs2.set(N - a[1]);
 61     for(int i = 1; i <= m; i++) {
 62         while(l > ask[i].l) {
 63             add(--l);
 64         }
 65         while(r < ask[i].r) {
 66             add(++r);
 67         }
 68         while(l < ask[i].l) {
 69             del(l++);
 70         }
 71         while(r > ask[i].r) {
 72             del(r--);
 73         }
 74         // ------------
 75         if(ask[i].f == 1) {
 76             tp = bs & (bs >> ask[i].x);
 77             ask[i].ans = tp.any();
 78         }
 79         else if(ask[i].f == 2) {
 80             tp = bs & (bs2 >> (N - ask[i].x));
 81             ask[i].ans = tp.any();
 82         }
 83         else {
 84             bool fd = 0;
 85             for(int j = 1; j * j <= ask[i].x; j++) {
 86                 if(ask[i].x % j) {
 87                     continue;
 88                 }
 89                 if(bs[j] && bs[ask[i].x / j]) {
 90                     ask[i].ans = 1;
 91                     break;
 92                 }
 93             }
 94         }
 95     }
 96 
 97     std::sort(ask + 1, ask + m + 1, cmp);
 98     for(int i = 1; i <= m; i++) {
 99         if(ask[i].ans) {
100             puts("hana");
101         }
102         else {
103             puts("bi");
104         }
105     }
106     return 0;
107 }
AC代码

 

转载于:https://www.cnblogs.com/huyufeifei/p/10212273.html

相关文章:

  • 我们是如何从ng1迁移ing到vue的
  • linux设置动态库路径和环境变量
  • 小细节见实力,告诉你vivo Z3如何成为爆款千元机
  • 8分钟学会Consul集群搭建及微服务概念
  • 2019年Java和JVM生态系统预测:OpenJDK将成为Java运行时市场领导者
  • 天海实业携手海宇勇创签署战略合作协议
  • 机器学习可行性与VC dimension
  • 处理linux下面的mysql乱码问题(下面的utf8换成gb2312也是可以的)
  • Java常见设计模式之适配器模式
  • 免费 官方的ASP.NET MVC电子书-Professional ASP.NET MVC 1.0
  • ashx文件的使用[转]
  • Python备份目录及目录下的全部内容
  • MS CRM 2011 RetrieveMultiple with JScript JQuery Silverlight LINQ FetchXML and QueryExpression
  • 初识SOA
  • 需求:需求获取技术之原型
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • interface和setter,getter
  • Just for fun——迅速写完快速排序
  • Koa2 之文件上传下载
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • SegmentFault 2015 Top Rank
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 前端相关框架总和
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 怎么把视频里的音乐提取出来
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #《AI中文版》V3 第 1 章 概述
  • #define,static,const,三种常量的区别
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (02)vite环境变量配置
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (二)fiber的基本认识
  • (十六)Flask之蓝图
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)甲方乙方——赵民谈找工作
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (轉)JSON.stringify 语法实例讲解
  • .cn根服务器被攻击之后
  • .gitattributes 文件
  • .net core Swagger 过滤部分Api
  • .NET Core Web APi类库如何内嵌运行?
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • ::前边啥也没有
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?