[每日随题15] 前缀和 - 拓扑排序 - 树状数组

整体概述

  • 难度:1000 →\rightarrow 1500 →\rightarrow 2000

1567B. MEXor Mixup

  • 标签:前缀和

  • 前置知识:无

  • 难度:Div.2.B 1000

题目描述:

image

输入格式:

image

image

输出格式:

image

样例输入:

5
1 1
2 1
2 0
1 10000
2 10000

样例输出:

3
2
3
2
3

解题思路:

  • 首先我们知道,想要让 MEX=aMEX=aMEX=a[0,a−1][0,a-1][0,a1] 范围内的数都得选,发现 1≤a≤3⋅1051\le a\le 3·10^51a3105 那么我们可以预处理出所有 [0,x][0,x][0,x] 的异或和。

  • 接着要让 xor=bxor=bxor=b,我们设 xori=0a−1=cxor_{i=0}^a-1=cxori=0a1=c,那么还差 bcb^cbc 就可以凑出该数字。

  • 需要注意的是如果 c=ac=ac=a,那么我们需要拿两个数字凑出 ccc,否则只需要直接再增加一个 ccc 即可。

    如果 c=0c=0c=0 表示直接凑出 bbb 了,那么不需要再加数字了。

  • 预处理出前缀异或和,查询复杂度 O(1)O(1)O(1),总复杂度 O(3⋅105)O(3·10^5)O(3105)

完整代码

#include<bits/stdc++.h>
#define Size(x) ((int)(x).size())
#define int long long
using namespace std;
const int N = 3e5+5;
int pre[N];
inline void solve(){int a,b; cin >> a >> b;int c = pre[a-1]^b;if(!c) cout << a << '\n';else if(c == a) cout << a+2 << '\n';else cout << a+1 << '\n';
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; cin >> T;for(int i=1;i<N;i++) pre[i] = pre[i-1]^i; while(T--) solve();return 0;
}

501C. Misha and Forest

  • 标签:拓扑排序

  • 前置知识:无

  • 难度:Div.2.C 1500

题目描述:

image

输入格式:

image

输出格式:

image

样例输入:

3
2 3
1 0
1 0
2
1 1
1 0

样例输出:

2
1 0
2 0
1
0 1

解题思路:

  • 由于是一片森林,不存在环,那么一定有某些节点的度为 111,而我们又知道这些节点的相邻节点编号的异或和,就是相邻节点的编号,那么这些边就都可以确定了。

  • 接着在未确定的边中删去这些边,就会又有某些节点度为 111,这个过程其实就是拓扑排序的过程,我们跑一遍拓扑排序,每次连边即可。

    需要注意的是,如果出队列的点度为 000 表明已经连过了,此时跳过即可。

  • 总复杂度 O(n)O(n)O(n)

完整代码

#include<bits/stdc++.h>
#define Size(x) ((int)(x).size())
#define int long long
using namespace std;
const int N = (1<<16)+5;
int n,d[N],eor[N];
vector<pair<int,int>> res;
inline void solve(){cin >> n;for(int i=0;i<n;i++) cin >> d[i] >> eor[i];queue<int> qu;for(int i=0;i<n;i++) if(d[i] == 1) qu.push(i);while(!qu.empty()){int u = qu.front(); qu.pop();int v = eor[u];if(!d[u]) continue;res.push_back({u,v});eor[v] ^= u;if(--d[v] == 1) qu.push(v);}cout << res.size() << '\n';for(auto [u,v]:res) cout << u << ' ' << v << '\n';
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; T = 1;while(T--) solve();return 0;
}

755D. PolandBall and Polygon

  • 标签:树状数组

  • 前置知识:无

  • 难度:8VC Venture Cup 2017.D 2000

题目描述:

image

输入格式:

image

输出格式:

image

样例输入:

5 2
10 3

样例输出:

2 3 5 8 11 
2 3 4 6 9 12 16 21 26 31 

解题思路:

  • 通过画图我们发现,画一条线增加的区域数画一条线增加的区域数画一条线增加的区域数 等同于 与原有线段的交点个数+1与原有线段的交点个数+1与原有线段的交点个数+1,所以问题就转化为每次给出线段的两个端点,求有多少个交点。

  • 我们发现所有相交线段的两个端点分别位于线段两侧,即有且仅有一个端点在新线段的 (l,r)(l,r)(l,r) 间。由于每条线段两个端点间的距离是固定的,因此我们仅需统计在 (l,r)(l,r)(l,r) 内的节点的总度数,即为交点个数。

    需要注意的是,我们用的 [l,r][l,r][l,r] 区间需要是劣弧的那一段。

  • 那么我们用树状数组进行单点修改,区间查询,总复杂度 O(n⋅log2n)O(n·log_{2}n)O(nlog2n)

完整代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+5;
int n,k,tr[N];
inline void add(int x,int v){for(int i=x;i<=n;i+=i&-i) tr[i] += v;
}
inline long long sum(int l,int r){if(l > r) return 0;long long ans = 0;for(int i=r;i;i&=i-1) ans += tr[i];for(int i=l-1;i;i&=i-1) ans -= tr[i];return ans;
}
inline void solve(){cin >> n >> k;long long ans = 1;for(int i=1,p=1,l,r,cur;i<=n;i++){l = p,r = p = l+k > n ? l+k-n : l+k;if(l > r) swap(l,r);cur = (r-l-1) <= (n-r+l-1) ? sum(l+1,r-1) : sum(r+1,n) + sum(1,l-1); ans += cur+1;cout << ans << ' ';add(l,1), add(r,1);}
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; T = 1;while(T--) solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90138.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DDD领域驱动设计C++实现案例:订单管理系统

一、DDD核心概念简介 领域驱动设计(Domain-Driven Design)是一种软件开发方法论&#xff0c;强调将业务领域的概念和规则融入软件设计中。核心概念包括&#xff1a; 值对象(Value Object): 无唯一标识&#xff0c;基于属性值判断相等性实体(Entity): 有唯一标识&#xff0c;其生…

神经网络和机器学习的一些基本概念

记录一些基本概念,不涉及公式推导,因为数学不好,记了也没啥用,但是知道一些基本术语以及其中的关系,对神经网络训练有很大帮助。 可能有些概念不会讲得很详细,但是当你有了这个概念,你就知道往这个方向去获取更详细的信息,不至于连往哪走都不知道。 下面以多元线性回归…

MySQL(146) 如何迁移数据库到新服务器?

数据库迁移到新服务器是一项复杂而重要的任务&#xff0c;确保数据完整性和最小化停机时间至关重要。以下是一个详细的步骤指导&#xff0c;包括准备工作、数据备份、数据传输、数据恢复和验证的全过程。 一、准备工作 1. 确认服务器环境 源服务器&#xff1a;当前运行数据库的…

图论的整合

图 有若干个节点&#xff0c;有若干条边连接节点。&#xff08;两个点之间不是必须相连&#xff09; 比如&#xff1a; 有向图 可以理解为边上面有箭头的图&#xff0c;比如下面这张图&#xff1a; 在这张图中&#xff0c;点 111 可以通过这条有向边到达点 222&#xff0c…

电子设计大赛【C语言核心知识点】讲解

目录 前言 1. 基础语法 2. 流程控制 3. 函数 4. 数组与字符串 5. 指针&#xff08;核心重点&#xff09; 6. 内存管理 7. 结构体与联合体 8. 文件操作 9. 预处理器 10. 高级特性 内存布局图解 前言 在进行程序代码开发之前&#xff0c;需要掌握好C语言各个模块之间…

Numpy 库 矩阵数学运算,点积,文件读取和保存等

目录 1.数组&#xff08;矩阵&#xff09;的组合 2.数组&#xff08;矩阵&#xff09;的切割 3.数组的数学运算 4.数组的深拷贝和浅拷贝 5.随机模块 6.矩阵统计运算 7.矩阵的特有运算点积&#xff0c;求逆 8.文件读取和保存 1.数组&#xff08;矩阵&#xff09;的组合 水…

STL学习(?函数对象,谓词,内建函数对象)

目录 一、函数对象 1.函数对象的概念 2.函数对象的使用 &#xff08;1&#xff09;函数对象在使用的时候&#xff0c;可以像普通函数那样调用&#xff0c;可以有参数&#xff0c;也可以有返回值。 &#xff08;2&#xff09;函数对象超出普通函数的概念&#xff0c;函数对象…

【爬虫】05 - 爬虫攻防

爬虫05 - 爬虫攻防 文章目录爬虫05 - 爬虫攻防一&#xff1a;随机User-Agent爬虫1&#xff1a;fake-useragent2&#xff1a;高级反反爬策略3&#xff1a;生产环境建议二&#xff1a;代理IP爬虫1&#xff1a;获取代理IP2&#xff1a;高阶攻防3&#xff1a;企业级的代理实战三&am…

FPGA自学——存储器模型

FPGA自学——存储器模型 文章目录FPGA自学——存储器模型一、IP核二、ROM&#xff08;read only memory&#xff09;三、ROM的IP核调用四、RAM&#xff08;random access memory&#xff09;五、RAM的IP核调用总结1.不同波形的使用的存储器2.块与分布式的选择3.FPGA与模块的容量…

【C++】stack和queue拓展学习

目录 1.反向迭代器思路及实现 1.1. 源码及框架分析 1.2. 实现反向迭代器 2.stack和queue练习拓展-计算器实现 2.1. 后缀表达式概念 2.2. 后缀表达式运算规则 2.3. 中缀表达式转后缀表达式 2.3.1 转换思路 2.3.2 代码实现 2.4. 计算器实现 1.反向迭代器思路及实现 1.1…

Web3与区块链如何革新网络安全——走在前沿

随着互联网技术的飞速发展&#xff0c;网络安全问题日益成为全球关注的焦点。Web3和区块链技术作为新兴的技术力量&#xff0c;正在逐步改变网络安全的格局。本文将探讨Web3和区块链技术如何革新网络安全&#xff0c;走在技术前沿。 1. Web3技术概述 Web3&#xff0c;即第三代互…

网络初级安全第三次作业

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户登录</title><style>* {margin:…

CSS中用display实现元素的显示/隐藏切换

** 通过display中的none和block ** 在前端开发中&#xff0c;display: none 和 display: block 是两种常用的 CSS 显示模式&#xff0c;核心区别在于&#xff1a;是否在页面中保留元素的占位空间 1. 核心区别属性display: nonedisplay: block占位空间元素完全从渲染树中移除&am…

因果图方法设计测试用例的价值与使用范围

一、因果图方法的核心原理 因果图方法通过分析软件规格说明中的输入条件&#xff08;因&#xff09;和输出结果&#xff08;果&#xff09;之间的逻辑关系&#xff0c;利用图形化方式将这些关系清晰展现。它使用特定的符号表示因果关系&#xff08;如恒等、非、或、与&#xff…

智慧农服数字化平台-数字科技赋能农业,开启智慧三农新篇章

智慧农服数字化平台数字科技赋能农业&#xff0c;开启智慧三农新篇章平台概览在乡村振兴和农业现代化的时代背景下&#xff0c;我们推出了创新的农业服务数字化平台——一个专为农业生产者打造的综合性SaaS服务平台。平台以"科技助农、数据兴农"为使命&#xff0c;通…

在线教育培训课程视频如何防下载、防盗录?

在数字化学习日益普及的今天&#xff0c;高质量的在线课程已成为教育机构、知识付费平台和讲师的核心竞争力。如何在不影响学员正常学习体验的前提下&#xff0c;有效防止课程视频被恶意盗取&#xff1f;今天介绍在线教育课程防下载、防盗录的10种视频加密方法&#xff0c;看看…

图像分析学习笔记(2):图像处理基础

图像分析学习笔记&#xff1a;图像处理基础图像增强方法图像复原方法图像分割方法形态学处理图像增强方法 目的&#xff1a;改善视觉效果&#xff0c;例如增强对比度定义&#xff1a;为了改善视觉效果、便于人或计算机对图像的分析理解&#xff0c;针对图像的特点或存在的问题…

生存分析机器学习问题

研究目标&#xff1a; 开发一个机器学习模型&#xff0c;用于个性化预测XXX的总体生存期。 模型输入&#xff1a;结合生存时间、治疗方案、人口统计学特征和实验室测试结果等多种特征。 模型输出&#xff1a;预测二元结果&#xff08;活着 vs. 死亡&#xff09;。 应用场景&…

【华为机试】547. 省份数量

文章目录547. 省份数量描述示例 1示例 2提示解题思路核心分析问题转化算法选择策略1. 深度优先搜索 (DFS)2. 广度优先搜索 (BFS)3. 并查集 (Union-Find)算法实现详解方法一&#xff1a;深度优先搜索 (DFS)方法二&#xff1a;广度优先搜索 (BFS)方法三&#xff1a;并查集 (Union…

09_Spring Boot 整合 Freemarker 模板引擎的坑

09_Spring Boot 整合 Freemarker 模板引擎的坑 1.背景&#xff1a; springboot 版本&#xff1a;3.0.2 2. 引入依赖 在 pom.xml 中添加&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web<…