BZOJ2568 [国家集训队2012]比特集合
Description
INS M : 将元素 M 插入到集合S中;
DEL M : 将集合S中所有等于 M 的元素删除;
ADD M : 将集合S中的所有元素都增加数值M ;
QBIT k : 查询集合中有多少个元素满足其二进制的第 k位为 1 。
初始时,集合S为空集。请实现一个比特集合,并对于所有的QBIT操作输出相应的答案。
Input
接下来N行,每行为一个操作,格式见问题描述。
Output
Sample Input
INS 1
QBIT 0
ADD 1
QBIT 0
QBIT 1
DEL 2
INS 1
QBIT 1
Sample Output
0
1
0
HINT
数据规模和约定
时间限制2s。
对于30%的数据,1 ≤ N ≤ 10000。
对于100%的数据,1 ≤ N ≤ 500000;QBIT操作中的k满足, 0 ≤ k < 16。INS/DEL操作中,满足0 ≤ M ≤ 10^9;ADD操作中, 满足0 ≤ M ≤ 1000。
注意
注意集合S可以包含多个重复元素。
题解
首先我们可以发现整体加只是要维护一个标记cnt表示当前加了多少,那么add x->add (x - cnt), del x -> del (x - cnt), qbit k ->查询加cnt之后第k位为1的数的个数<=>查询后k位在$[2^k - cnt, 2^{k + 1} - 1 - cnt]$范围内的数。
令$c[i][j]$表示后$i$位小于等于$j$的数的个数,用树状数组维护,那么答案就是$num - c[i][2^k-1]$(没有计$cnt$的影响)。
附代码:
#include <algorithm>
#include <cstdio>
#include <set>
typedef long long LL;
const int mod = 1000000009;
inline int lowbit(int x) { return x & -x; }
const int N = 1 << 16;
int s[16][N];
void add(int a, int k, int x) {
for (++k; k <= N; k += lowbit(k))
s[a][k] += x;
}
int query(int a, int k) {
int ans = 0;
for (++k; k; k -= lowbit(k)) ans += s[a][k];
return ans;
}
std::multiset<int> S;
int main() {
int m, x, cnt = 0, num = 0;
scanf("%d", &m);
char s[10];
while (m--) {
scanf("%s%d", s, &x);
if (*s == 'I') {
++num;
S.insert(x -= cnt);
for (int i = 0; i < 16; ++i) add(i, ((1 << (i + 1)) - 1) & x, 1);
} else if (*s == 'D') {
int l = S.count(x -= cnt);
num -= l;
S.erase(x);
for (int i = 0; i < 16; ++i) add(i, ((1 << (i + 1)) - 1) & x, -l);
} else if (*s == 'A') {
cnt += x;
} else {
int r = ((1 << x) - cnt - 1) & ((1 << (x + 1)) - 1), l = (-cnt) & ((1 << (x + 1)) - 1);
if (r >= l)
printf("%d\n", num - query(x, r) + query(x, l - 1));
else
printf("%d\n", query(x, l - 1) - query(x, r));
}
}
return 0;
}
BZOJ2568 [国家集训队2012]比特集合的更多相关文章
- [国家集训队2012]middle
http://cogs.pro:8080/cogs/problem/problem.php?pid=1763 二分答案x 把区间内>=x的数设为1,<x的数设为-1 左端点在[a,b]之间 ...
- [国家集训队2012]JZPFAR
[国家集训队2012]JZPFAR 题目 平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个(或多个)点距离( ...
- [国家集训队2012]tree(陈立杰)
[国家集训队2012]tree(陈立杰) 题目 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树.题目保证有解. INPUT 第一行V,E,need分别表示 ...
- 数据结构(动态树):[国家集训队2012]tree(伍一鸣)
[问题描述] 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原 ...
- 【国家集训队2012】tree(伍一鸣)
Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 ...
- [COGS 1799][国家集训队2012]tree(伍一鸣)
Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2 ...
- cogs1799 [国家集训队2012]tree(伍一鸣)
LCT裸题 注意打标记之间的影响就是了 这个膜数不会爆unsigned int #include<cstdio> #include<cstdlib> #include<a ...
- [国家集训队2012]middle(陈立杰)
我是萌萌的传送门 我是另一个萌萌的传送门 脑残错误毁一下午…… 其实题解早就烂大街了,然而很久之前我只知道是二分答案+主席树却想不出来这俩玩意儿怎么一块儿用的……今天又翻了几篇题解才恍然大悟,是把权值 ...
- [国家集训队2012]tree(陈立杰) 题解(二分+最小生成树)
tree 时间限制: 3 Sec 内存限制: 512 MB 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. 输入 第一行V, ...
随机推荐
- P5242 [USACO19FEB]Cow Dating
题目链接 题意分析 首先我们可以得出计算公式 \[s_i=\prod_{k=1}^i(1-p_k)\] \[f_i=\sum_{k=1}^i\frac{p_k}{1-p_k}\] 那么 \[ans(i ...
- java中的jdk配置详解:
1.配值系统变量"JAVA_HOME" 变量名JAVA_HOME: 指向:JDK(java开发工具包)的安装路径 目的:使用JDK安装目录时,可以直接通过”%JAVA_HOME%“ ...
- 43.oracle同义词
不愿长大,好多人如此,其实这是一种逃避责任没有担当的表象. 同义词 从字面上理解就是别名的意思,和视图的功能类似,就是一张映射关系. 私有同义词:一般是普通用户自己建立的同义词,创建者需要create ...
- C#-WebForm-★★★JQuery知识——DOM操作★★★
例如: $("#btn1").attr( "disabled" , "disabled" ); 例如: $("#d1") ...
- 新人须知的网站文件和MySQL数据库备份流程思路
昨天老左再次遇到一个网友告知使用的一台服务器自己无意中点击主机商面板的导致服务器被重新安装系统(居然这也可以),问问是否可以恢复数据.这个同学和之前遇到好几次的网友真相似,从开始购买服务器,到自己网站 ...
- laravel 表单接收
POST方式接收 视图层 <form action="/submit" method="post"> {{csrf_field()}} //必 ...
- Mac 10.12安装图片切换工具ArcSoft Photo+
说明:Mac自带的图片切换不能连续切换,这款工具和美图看看差不多. 下载: (链接: https://pan.baidu.com/s/1i5rLYzr 密码: 49dp)
- 【Kafka】Broker之Server.properties的重要参数说明
名称 描述 类型 默认值 有效值区间 重要程度 zookeeper.connect zk地址 string 高 advertised.host.name 过时的:只有当advertised.liste ...
- 【分步详解】两个有序数组中的中位数和Top K问题
(这也是一道leetcode的经典题目:<LeetCode>解题笔记:004. Median of Two Sorted Arrays[H] 问题介绍 这是个超级超级经典的分治算法!!这个 ...
- JVM虚拟机指令
参考及转载: (1)https://blog.csdn.net/qq_33301113/article/details/73717855 (2)https://blog.csdn.net/wangxf ...