loj2046 「CQOI2016」路由表
大傻逼trie树,更傻逼的是我这都没独立想出来,以后要少看题解,多多思考
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int m, cnt, s[20000005][2], now, orz[35], tag[20000005], faq;
char ss[15];
struct Node{
int idx, dis;
}nd[35];
void rn(int &x){
char ch=getchar();
x = 0;
while(ch<'0' || ch>'9') ch = getchar();
while(ch>='0' && ch<='9'){
x = x * 10 + ch - '0';
ch = getchar();
}
}
void insert(){
int uu, uv, uw, ux, uy;
rn(uu); rn(uv); rn(uw); rn(ux); rn(uy);
now++;
for(int i=7; i>=0; i--)
orz[24+i] = (uu>>i)&1;
for(int i=7; i>=0; i--)
orz[16+i] = (uv>>i)&1;
for(int i=7; i>=0; i--)
orz[8+i] = (uw>>i)&1;
for(int i=7; i>=0; i--)
orz[i] = (ux>>i)&1;
int u=0;
for(int i=31; 31-i+1<=uy; i--){
if(!s[u][orz[i]]) s[u][orz[i]] = ++cnt;
u = s[u][orz[i]];
}
tag[u] = now;
}
bool cmp(Node x, Node y){
return x.idx<y.idx;
}
int query(){
int uu, uv, uw, ux, uy, uz;
rn(uu); rn(uv); rn(uw); rn(ux); rn(uy); rn(uz);
for(int i=7; i>=0; i--)
orz[24+i] = (uu>>i)&1;
for(int i=7; i>=0; i--)
orz[16+i] = (uv>>i)&1;
for(int i=7; i>=0; i--)
orz[8+i] = (uw>>i)&1;
for(int i=7; i>=0; i--)
orz[i] = (ux>>i)&1;
faq = 0;
int u=0;
for(int i=31; i>=0; i--){
if(!s[u][orz[i]]) break;
u = s[u][orz[i]];
if(tag[u])
nd[++faq] = (Node){tag[u], 31-i+1};
}
sort(nd+1, nd+1+faq, cmp);
int re=0, maxdis=0;
for(int i=1; i<=faq; i++){
if(nd[i].idx>=uy && nd[i].idx<=uz && (i==1 || nd[i].dis>maxdis))
re++;
maxdis = max(maxdis, nd[i].dis);
}
return re;
}
int main(){
cin>>m;
while(m--){
scanf("%s", ss);
if(ss[0]=='A') insert();
else printf("%d\n", query());
}
return 0;
}
loj2046 「CQOI2016」路由表的更多相关文章
- 【LOJ】#2046. 「CQOI2016」路由表
题解 题面太长无法阅读系列-- 这里说的选择改变指的是在下面区间里碰上了一个更长的可匹配的地址,如果可匹配但是匹配长度没有当前的值大,那么不算改变 我们建一个可持久化的trie,查询的时候先在前\(a ...
- LoibreOJ 2042. 「CQOI2016」不同的最小割 最小割树 Gomory-Hu tree
2042. 「CQOI2016」不同的最小割 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- loj #2044. 「CQOI2016」手机号码
#2044. 「CQOI2016」手机号码 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- LibreOJ2044 - 「CQOI2016」手机号码
Portal Description 给出两个十一位数\(L,R\),求\([L,R]\)内所有满足以下两个条件的数的个数. 出现至少\(3\)个相邻的相同数字: 不能同时出现\(4\)和\(8\). ...
- LibreOJ2043 - 「CQOI2016」K 远点对
Portal Description 给出平面上的\(n(n\leq10^5)\)个整点,求在欧几里得距离下第\(k\)远的点对之间的距离. Solution k-d树+堆. 用小根堆维护当前找到的第 ...
- LibreOJ2045 - 「CQOI2016」密钥破解
Portal Description 给出三个正整数\(e,N,c(\leq2^{62})\).已知\(N\)能表示成\(p\cdot q\)的形式,其中\(p,q\)为质数.计算\(r=(p-1)( ...
- LibreOJ2042 - 「CQOI2016」不同的最小割
Portal Description 给出一个给出一个\(n(n\leq850)\)个点\(m(m\leq8500)\)条边的无向图.定义\(cut(s,t)\)等于\(s,t\)的最小割的容量,求在 ...
- 「CQOI2016」不同的最小割
「CQOI2016」不同的最小割 传送门 建出最小割树,把每一个点对的最小割抠出来 \(\text{unique}\) 一下就好了. 参考代码: #include <algorithm> ...
- 「CQOI2016」K 远点对
/* 考虑暴力 可以n ^ 2枚举点对 然后用一个容量为2k的小根堆来维护第k大 kd-tree呢就是来将这个暴力优化, 每次先找远的并且最远距离不如堆顶的话就不继续找下去 貌似挺难构造数据卡的 */ ...
随机推荐
- aapt.exe finished with non-zero exit value 1
在一个APP 中导入 严振杰的 ALBUM,出现错误 在网上找了各种,最后在 stackoverflow上找到这样的说法: -Go to File->project structure-> ...
- js 数组操作常用方法
push():在数组后面加入元素,并返回数组的长度: unshift():在数组前面就如元素,并返回数组的长度: pop():删除最后一个元素: var arr =[1,2,3,4,5] ; arr. ...
- map侧连接
两个数据集中一个非常小,可以让小数据集存入缓存.在作业开始这些文件会被复制到运行task的节点上. 一开始,它的setup方法会检索缓存文件. 与reduce侧连接不同,Map侧连接需要等待参与连接的 ...
- linux打开文件数测试
/proc/sys/kernel/threads-max 系统最大线程数量 /proc/sys/vm/max_map_count 限制一个进程可以拥有的VMA(虚拟内存区域)的数量 /proc/sys ...
- Html+css实现带图标的控件
</pre><pre name="code" class="html"><!DOCTYPE html> <html l ...
- linux 命令——ls
一. ls命令 ls 命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文 件及文件夹清单. 通过ls 命 ...
- Redis单机数据库
单机数据库 ·Redis服务器的所有数据库都保存在redisServer.db数组中,而数据库的数量则由redisServer.dbnum属性保存. ·客户端通过修改目标数据库指针,让它指向redis ...
- IOS 监听键盘的通知(NSNotificationCenter)
通知方法: /** * 当键盘改变了frame(位置和尺寸)的时候调用 */ - (void)keyboardWillChangeFrame:(NSNotification *)note { // 设 ...
- FETCH - 用游标从查询中抓取行
SYNOPSIS FETCH [ direction { FROM | IN } ] cursorname where direction can be empty or one of: NEXT P ...
- 回归树的原理及Python实现
大名鼎鼎的 GBDT 算法就是用回归树组合而成的.本文就回归树的基本原理进行讲解,并手把手.肩并肩地带您实现这一算法. 1. 原理篇 1.1 最简单的模型 如果预测某个连续变量的大小,最简单的模型之一 ...