Description

Solution

加法减法可以分开考虑,如果只有加法的话,直接暴力进位复杂度是对的
询问的时候就是把两个二进制数做差,判断第 \(k\) 位的取值
实际上我们只需要判断 \(1\) 到 \(k-1\) 位是否需要借位就知道了做差后的值
那么就需要判断两个二进制数的某个后缀的大小,我们二分出第一个不相同的位置,然后判断一下这一位的大小关系即可
可以用 \(zkw\) 线段树维护一下第一个不同的位置,类似于线段树上二分

#include<bits/stdc++.h>
using namespace std;
template<class T>void gi(T &x){int f;char c;for(f=1,c=getchar();c<'0'||c>'9';c=getchar())if(c=='-')f=-1;for(x=0;c<='9'&&c>='0';c=getchar())x=x*10+(c&15);x*=f;
}
const int N=35000050,inf=1e9,M=1<<25;
int n,op,x,y,T;char s1[N],s2[N],d[N*2];
inline void add(){gi(x);gi(y);int l=inf,r=0;char *a=(x>0?s1:s2);x=abs(x);for(int i=0;i<=30;i++){if(x>>i&1){int t=y+i;while(++a[t]>=2)a[t++]=0;l=min(l,y+i);r=max(r,t);}}for(int i=l;i<=r;i++)d[i+M]=s1[i]^s2[i];for(l=(l+M)>>1,r=(r+M)>>1;l;l>>=1,r>>=1)for(int i=l;i<=r;i++)d[i]=d[i<<1]|d[i<<1|1];
}
inline int query(int x){for(int i=x+M;i;i>>=1){if(i&1&d[i^1]){for(i^=1;i<M;(i<<=1)|=d[i|1]);return i-M;}}return -1;
}
int main(){freopen("pp.in","r",stdin);freopen("pp.out","w",stdout);gi(n);gi(T);gi(T);gi(T);while(n--){gi(op);if(op==1)add();else{gi(x);y=query(x);if(y==-1 || s1[y]>=s2[y])printf("%d\n",s1[x]^s2[x]);else printf("%d\n",s1[x]==s2[x]);}}return 0;
}

转载于:https://www.cnblogs.com/Yuzao/p/9046101.html

bzoj 4942: [Noi2017]整数相关推荐

  1. bzoj 4942 整数 思考记录

    如果k==10^6,那这个题可以用线段树维护 维护连续0的个数   ,维护连续1的个数     用于进位退位 所以可以把加数拆下来搞即可 但这个k最大是等于30*10^6的 首先对于这个30*10^6 ...

  2. bzoj 1263: [SCOI2006]整数划分

    1263: [SCOI2006]整数划分 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 1449  Solved: 736 [Submit][Stat ...

  3. BZOJ 4946: [Noi2017]蔬菜 模拟费用流

    title BZOJ 4946 LUOGU 3826 简化题意: 定义了一种蔬菜为:\(ai,si,ci,xi\),意思是蔬菜的价格为 \(a_i\),第一份卖出时价格为 \(a_i+s_i\),一共 ...

  4. bzoj 4945: [Noi2017]游戏

    Description Solution 首先我们发现一个位置如果不是 \('x'\),那么就只有两种选择 而 \('x'\) 的个数小于等于 \(8\),直接枚举是哪个就好了 然后就是 \(2-sa ...

  5. [NOI2017]整数

    https://www.luogu.org/problemnew/show/P3822 题解 如果只有加法没有减法,那么我们朴素进位的时间复杂度是均摊\(O(1)\)的. 那么减法的话我们维护一个增量 ...

  6. [bzoj4942][noi2017]整数【线段树】

    [题目描述] http://www.lydsy.com/JudgeOnline/upload/Noi2017D1.pdf [题解] 每个操作若不要进退位就暴力修改,否则用线段树找到下一个可以进退位的地 ...

  7. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

  8. PKUSC2018训练日程(4.18~5.30)

    (总计:共66题) 4.18~4.25:19题 4.26~5.2:17题 5.3~5.9: 6题 5.10~5.16: 6题 5.17~5.23: 9题 5.24~5.30: 9题 4.18 [BZO ...

  9. NOI2010~NOI2018选做

    [NOI2010] [NOI2010]海拔 高度只需要0/1,所以一个合法方案就是一个割,平面图求最小割. [NOI2010]航空管制 反序拓扑排序,每次取出第一类限制最大的放置,这样做答案不会更劣. ...

最新文章

  1. python作者叫什么-Python18:什么是字典
  2. VUE iscroll(银联二维码,浩哥页面用过)
  3. 85.Mongoose指南 - Schema
  4. Liunx操作系统的引导过程(系统操作引导过程,模拟MBR,GRUB故障,root密码遗忘解决,优化启动过程 ,运行级别的分类)
  5. 4修改初始值_Java基础篇4——循环
  6. 【kruskal】【倍增】严格次小生成树(P4180)
  7. 【渝粤题库】陕西师范大学152206领导科学 作业(高起专、专升本)
  8. 陪同学面试,我竟然被录取了
  9. 韩国小哥哥用Pytorch实现谷歌最强NLP预训练模型BERT | 代码
  10. 快慢指针 —— 链表中点
  11. 使用工具类DbUtils连接数据库,并简单操作数据库
  12. git太慢时的加速办法,测试有效
  13. php网站iis7.5 session,IIS 7.5 asp Session超时时间设置方法
  14. Android: 页面元素抓取工具Weditor
  15. 一键去除照片水印—INpaint
  16. 20135202闫佳歆——信息安全系统设计基础第六周学习总结
  17. 60个未来的新兴服务业最红火
  18. 用尽量简单地话,一次讲明白傅里叶级数(FS)、傅里叶变换(FT)、离散时间傅里叶变换(DTFT)、离散傅里叶级数(DFS)、离散傅里叶变换(DFT)以及它们之间的联系和区别。
  19. 通过一道ARM PWN题引发的思考:jarvisOJ_typo
  20. mysql查询结果作为一个表_例题:数据库查询结果作为一个表

热门文章

  1. 虚拟机安装(Cent OS)
  2. 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
  3. 在做性能测试之前需要知道什么
  4. 一种获取过程调用堆栈信息的简单方法
  5. 网络布线,多图、有细节,【炮哥】讲诉,值得无经验午饭手抄
  6. 图解WindowsXP修改MAC地址
  7. 课外扩展:使用RADIUS来集中管理***服务器(2)
  8. 关于分组序号在MySQL中的实现
  9. 【正一专栏】登贝莱,该不该来!
  10. 有限个极限运算及常见错误小结