题目链接

题目

题目描述

首先给定一个定值k,支持如下操作(在数轴上)

  1. 加入一条线段[l,r]
  2. 删除一条已经存在的线段
  3. 给定x,问有多少个区间包含x+kt,其中t是一个整数变量,即t ∈ Z

比如说当x=2,k=3的时候,区间[7,10]是应该算入答案的,因为x+2k=8,且7 ≤ 8 ≤ 10

如果n=0,那么你只需要输出一行"fafa"然后结束程序即可(注意不输出双引号)

输入描述

第一行两个整数n,k,分别表示操作次数以及定值k

之后有n行,每行先输入一个整数op,之后分类讨论:

  1. op=1,此时再输入[l,r],表示加入一个区间[l,r]
  2. op=2,此时再输入[l,r],表示删除区间[l,r],保证这个区间存在(如果存在多个相同的区间,那么只需要删除其中的任意一个)
  3. op=3,此时再输入x,之后需要输出答案并换行

输出描述

对于每一个op=3的操作,输出查询结果后换行

示例1

输入

10 7
1 3393 14151
3 13229
1 3427 18356
1 7602 20138
1 8566 28714
1 1076 32552
2 3427 18356
2 8566 28714
3 10962
1 387 7783

输出

1
3

说明

(以下内容与本题无关)

这个样例,无疑是善良的出题人无私的馈赠。

大量精心构造的 n ≤ 100 的测试数据,涵盖了测试点中所有出现性质的组合。

你可以利用这个测试点,对自己的程序进行全面的检查。

足量的数据组数、不大的数据范围和多种多样的数据类型,能让程序中的错误无处遁形。

出题人相信,这个美妙的样例,可以给拼搏于 AC 这道题的逐梦之路上的你,提供一个有力的援助。

示例2

输入

0 0

输出

fafa

备注

一共有20个测试点,每个测试点5分

有4个测试点保证:\(n≤1000\)

有另外5个测试点保证:\(n≤10000\)

对于全部数据,保证:

\(0 ≤ n,k ≤ 10^5\) ,\(0 ≤ l ≤ r ≤ 10^9\) , \(0 ≤ x ≤ 10^9\)

题解

知识点:树状数组,离散化,数论。

\(n = 0\) 时,输出 fafa

  1. \(k = 0\) 时,需要区间修改、单点询问,可以用树状数组维护,需要先离散化区间端点。
  2. \(k \neq 0\) 时,需要区间修改、固定间隔的多点询问,注意到间隔是固定的,因此区间覆盖可以在模 \(k\) 意义下计算贡献,但要注意端点顺序可能相反,要分类处理,可以用树状数组维护。

时间复杂度 \(O(n\log n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>
using namespace std;
using ll = long long; template<class T>
struct Discretization {
vector<T> uniq;
Discretization() {}
Discretization(const vector<T> &src) { init(src); }
void init(const vector<T> &src) {
uniq = src;
sort(uniq.begin() + 1, uniq.end());
uniq.erase(unique(uniq.begin() + 1, uniq.end()), uniq.end());
}
int get(T x) { return lower_bound(uniq.begin() + 1, uniq.end(), x) - uniq.begin(); }
}; struct Query {
int op;
int x, l, r;
}; struct T {
ll sum;
static T e() { return { 0 }; }
T &operator+=(const T &x) { return sum += x.sum, *this; }
};
template<class T>
class Fenwick {
int n;
vector<T> node; public:
Fenwick(int _n = 0) { init(_n); } void init(int _n) {
n = _n;
node.assign(n + 1, T::e());
} void update(int x, T val) { for (int i = x;i <= n;i += i & -i) node[i] += val; } T query(int x) {
T ans = T::e();
for (int i = x;i >= 1;i -= i & -i) ans += node[i];
return ans;
}
}; int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, k;
cin >> n >> k;
if (n == 0) return cout << "fafa" << '\n', 0;
if (k == 0) {
vector<Query> q(n + 1);
vector<int> src(1);
for (int i = 1;i <= n;i++) {
int op;
cin >> op;
if (op == 1 || op == 2) {
int l, r;
cin >> l >> r;
l++, r++;
q[i] = { op,-1,l,r };
src.push_back(l);
src.push_back(r);
}
else {
int x;
cin >> x;
x++;
q[i] = { op,x,-1,-1 };
src.push_back(x);
}
}
Discretization<int> dc(src);
Fenwick<T> fw(dc.uniq.size());
for (int i = 1;i <= n;i++) {
auto [op, x, l, r] = q[i];
if (op == 1) fw.update(dc.get(l), { 1 }), fw.update(dc.get(r) + 1, { -1 });
else if (op == 2) fw.update(dc.get(l), { -1 }), fw.update(dc.get(r) + 1, { 1 });
else cout << fw.query(dc.get(x)).sum << '\n';
}
}
else {
Fenwick<T> fw(k + 1);
for (int i = 1;i <= n;i++) {
int op;
cin >> op;
if (op == 1) {
int l, r;
cin >> l >> r;
if (r - l + 1 >= k) fw.update(1, { 1 }), fw.update(k + 1, { -1 });
else {
l %= k;
r %= k;
l++, r++;
if (l <= r) fw.update(l, { 1 }), fw.update(r + 1, { -1 });
else fw.update(l, { 1 }), fw.update(k + 1, { -1 }), fw.update(1, { 1 }), fw.update(r + 1, { -1 });
}
}
else if (op == 2) {
int l, r;
cin >> l >> r;
if (r - l + 1 >= k) fw.update(1, { -1 }), fw.update(k + 1, { 1 });
else {
l %= k;
r %= k;
l++, r++;
if (l <= r) fw.update(l, { -1 }), fw.update(r + 1, { 1 });
else fw.update(l, { -1 }), fw.update(k + 1, { 1 }), fw.update(1, { -1 }), fw.update(r + 1, { 1 });
}
}
else {
int x;
cin >> x;
x %= k;
x++;
cout << fw.query(x).sum << '\n';
}
}
}
return 0;
}

NC21125 践踏的更多相关文章

  1. 牛客OI周赛6-提高组 B 践踏

    践踏 思路: 如果k不为0, 那么就是对k取模意义下的区间更新, 单点查询 否则, 就是普通的区间更新, 单点查询 代码: #pragma GCC optimize(2) #pragma GCC op ...

  2. 用 jQuery.ajaxSetup 实现对请求和响应数据的过滤

    不知道同学们在做项目的过程中有没有相同的经历呢?在使用 ajax 的时候,需要对请求参数和响应数据进行过滤处理,比如你们觉得就让请求参数和响应信息就这么赤裸裸的在互联网里来回的穿梭,比如这样: 要知道 ...

  3. .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制

    项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩过webAPI,但是领导要求必须用这个(具体原因鬼知道),只好硬着头皮上了. 最近刚做完权限这一块,分享出来给大家.欢 ...

  4. php 远程本地化无后缀图片

    $body = '<p style="margin: 0px 0px 1.1em; padding: 0px; color: rgb(51, 51, 51); font-family: ...

  5. iOS之应用发布中的一些细节

    Bundle identifier Xcode中 Target -> General中的bundle identifier ; info.plist中的Bundle identifier; 证书 ...

  6. 前端小知识(转载http://www.cnblogs.com/Wayou/p/things_you_dont_know_about_frontend.html)

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

  7. 不同json如何使用jsonArray以及ajax如何取,实现读取新闻

    jsp界面 <%@ page contentType="text/html;charset=gb2312"%><%@page import="org.j ...

  8. Timberwolves forward Kevin Garnett to retire _洛杉矶时报

    Timerwolves:森林狼队,forward:前锋; kevin Garnett,the best player in Minnesota Timberwolves history,is expe ...

  9. 偶的《javascript框架设计》终于出版

    #cnblogs_post_body p{ text-indent:2em!important; } 历时两年多,我的书终于付梓出版了.应各方面的要求,写软文一篇,隆重介绍一下此书对各位程序员的钱途有 ...

  10. 冷门JS技巧

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

随机推荐

  1. 运筹学 | 退化的最优解 vs 无穷多最优解?

    退化的最优解: 单纯形表的基可行解中,出现等于零的基变量.或者,按最小比值来确定出基向量时,存在两个以上相同最小比值. 出现的原因:模型中存在多余的约束. 无穷多最优解: 单纯形表中,按最大检验数 σ ...

  2. Linux复制安装 jdk 环境

    转载请注明出处: 最近在弄服务器环境,发现可以通过复制已安装 jdk 的服务器配置到新的服务器,并配置服务器环境变量配置文件就可以完成. 操作步骤如下: 1. 查看以安装jdk服务器的环境配置,并复制 ...

  3. 04 Tcl字符串

    Tcl字符串 4.1 Tcl将说有的变量值视作字符串,并将他们作为字符串进行保存. 命令 描述 append 将值追加到字符串尾 binary 二进制化字符串 format 字符串格式化 regexp ...

  4. 青少年CTF训练平台 — CRYPTO通关WP

    A2-Crypto Caesar vxshyk{g9g9g099-hg33-4f60-90gk-ikff1f36953j} 凯撒解码 qsnctf{b9b9b099-cb33-4a60-90bf-df ...

  5. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.25)

    来给大家伙送福利了! 一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘, ...

  6. 3 分钟了解 NVIDIA 新出的 H200

    英伟达在 2023 年全球超算大会上发布了备受瞩目的新一代 AI 芯片--H200 Tensor Core GPU.相较于上一代产品 H100,H200 在性能上实现了近一倍的提升,内存容量翻倍,带宽 ...

  7. Oracle数据类型的简单学习之一

    Oracle数据类型的简单学习之一 背景 因为信创安可替代的发展 有很多项目提到了数据库切换到国产数据库的要求. 一般情况是要求从Oracle/SQLServer 迁移到国产的: 达梦/瀚高/人大金仓 ...

  8. [转帖]oracle导出千万级数据为csv格式

    当数据量小时(20万行内),plsqldev.sqlplus的spool都能比较方便进行csv导出,但是当数据量到百万千万级,这两个方法非常慢而且可能中途客户端就崩溃,需要使用其他方法. 一. sql ...

  9. [转帖]一份完整的阿里云 Redis 开发规范,值得收藏!

    https://blog.csdn.net/NicolasLearner/article/details/117449847 作者:付磊-起扬 http://yq.aliyun.com/article ...

  10. [转帖]一文带你了解mysql sql model的only_full_group_by模式

    https://zhuanlan.zhihu.com/p/368440685 Mysql only_full_group_by与Error 1055问题分析 1 声明 本文的数据来自网络,部分代码也有 ...