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