博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树状数组 + 位运算 LA 4013 A Sequence of Numbers
阅读量:6658 次
发布时间:2019-06-25

本文共 1119 字,大约阅读时间需要 3 分钟。

 

题意:n个数,两种操作,一是每个数字加x,二是查询& (1 << T) == 1 的个数

分析:因为累加是永远的,所以可以离线处理。树状数组点是c[16][M] 表示数字x%(1 << j) 后的数字pos,考虑第j位的个数。当询问时根据add不同的值不同的处理情况。

#include 
using namespace std;typedef long long ll;const int N = 1e5 + 5;const int R = (int) 1 << 16;const int M = R + 10;struct BIT { int c[16][M]; void init(void) { memset (c, 0, sizeof (c)); } void updata(int b, int pos) { pos++; //pos 可能等于0 while (pos < M) { c[b][pos] += 1; pos += pos & -pos; } } int sum(int b, int pos) { pos++; int ret = 0; while (pos > 0) { ret += c[b][pos]; pos -= pos & -pos; } return ret; }}bit;int main(void) { int n, cas = 0; while (scanf ("%d", &n) == 1) { if (n == -1) break; bit.init (); for (int x, i=0; i
= R) add %= R; } else { int t; scanf ("%d", &t); int tail = add % (1 << t); if (add & (1 << t)) { //(1<

  

 

转载于:https://www.cnblogs.com/Running-Time/p/5221529.html

你可能感兴趣的文章
tomcat安装
查看>>
KVM虚拟化的部署及使用
查看>>
Linux软链接和硬链接文件
查看>>
semaphore.h
查看>>
java学习笔记 --- 网络编程(套接字)
查看>>
tkinter 03 Listbox 列表部件
查看>>
Linux磁盘管理命令介绍
查看>>
一锤定音:高通(Qualcomm)370亿美元收购NXP,成为全球第一大汽车芯片供应商...
查看>>
JVM工作原理学习笔记
查看>>
windows 共享访问相关问题
查看>>
DC的sysvol目录管理!
查看>>
apache 防盗链 与 地址重写
查看>>
python3版本mysql的操作
查看>>
登录式shell与非登录式shell
查看>>
指针参数是如何传递内存的
查看>>
Server系列7:看win2012时代如何强制还原记录数据
查看>>
Linux下查看文件和文件夹大小 du df
查看>>
mongodb数据备份与恢复
查看>>
elf文件解析(cpp版)
查看>>
使用VS2010编译MongoDB C++驱动详解
查看>>