Kuro and GCD and XOR and SUM

题意:给你一个空数组。 然后有2个操作, 1是往这个数组里面插入某个值, 2.给你一个x, k, s。要求在数组中找到一个v,使得k|gcd(x,v)  (即gcd(x,v)是k的倍数,v+x <= k, x ^ v的值最大。

题解:XOR亦或问题是经典的题目,一般都是用01字典树去处理。 然后需要满足条件1, 所以我们可以对于每一个点建立一个字典树,每次添加数的时候都往这个数的因子添加这个值,这样我们直接访问对应的k就可以找到答案了。

代码:

 #include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const LL mod = 1e9+;
const int N = 1e5+;
vector<int> son[N];
struct Node{
int Min;
Node * p[];
Node(){
Min = INF;
p[] = p[] = nullptr;
}
}*rt[N];
bool vis[N];
void init(){
for(int i = ; i < N; i++){
rt[i] = new Node();
for(int j = i; j < N; j+=i){
son[j].pb(i);
}
}
}
void Add(int k, int u){
Node *tmp = rt[k];
tmp -> Min = min(tmp -> Min, u);
for(int i = ; i >= ; i--){
int id = u>>i & ;
if(tmp -> p[id] == nullptr)
tmp -> p[id] = new Node();
tmp = tmp -> p[id];
tmp -> Min = min(tmp -> Min, u);
}
}
int Query(int x, int k, int s){
Node *tmp = rt[k];
if(x%k != || tmp->Min+x > s)
return -;
int ret = ;
for(int i = ; i >= ; i--){
int id = x >> i & ;
if(tmp -> p[id^] != nullptr && tmp -> p[id^] -> Min + x <= s){
tmp = tmp -> p[id^];
ret += (id^) << i;
}
else {
tmp = tmp -> p[id];
ret += id << i;
}
}
return ret;
}
int main(){
///Fopen;
init();
int q, t, u, x, s, k;
scanf("%d", &q);
while(q--){
scanf("%d", &t);
if(t == ){
scanf("%d", &u);
if(!vis[u]){
vis[u] = ;
for(int k : son[u]){
Add(k, u);
}
}
}
else{
scanf("%d%d%d", &x, &k, &s);
printf("%d\n", Query(x,k,s));
}
}
return ;
}

最新文章

  1. join Linq
  2. golang中如何使用http,socket5代理
  3. 如何使用BHO定制你的Internet Explorer浏览器
  4. &#39;libxml/tree.h&#39; file not found
  5. Android样式的开发:Style篇
  6. 浅谈“be practical and realistic”
  7. poj 1113 Mall
  8. 普通pc电脑安装苹果系统mac_详细教程(精)附带所有工具下载
  9. The Black Tux | IT桔子
  10. 一些常用数据库操作在mysql及sql server中实现方式的差异
  11. C#语言基础——定义变量、变量赋值、输入输出
  12. xpath技术解析xml以及案例模拟用户登录效果
  13. Vue之生命周期函数和钩子函数详解
  14. python学习笔记之线程、进程和协程(第八天)
  15. 导入到eclipse里的工程挺大的,然后就一直报: An internal error occurred during: &quot;Building workspace&quot;. GC overhead limit exceeded 这个错误。
  16. isinstance和issubclass,__getattribute__,__getitem__,__setitem__,delitem__,__str__(三十五)
  17. CSS学习笔记之样式规划
  18. vue-cli,build 后,报错的解决办法
  19. Mysql_游标
  20. 【设计模式】—— 中介者模式Mediator

热门文章

  1. Java经典编程题
  2. Log4j 2 配置
  3. 【Java例题】2.4求函数
  4. 7、数组中添加元素(test5.java)
  5. idea中的springboot项目如何不用重新编译,自动热部署
  6. 微信分享(移动web端)
  7. scapy构造打印ARP数据包
  8. intellIJ IDEA学习笔记2
  9. 垂直渐变的Button
  10. python3虚拟环境中解决 ModuleNotFoundError: No module named &#39;_ssl&#39;