清北合肥day2-day5
day2:215
这一天的题目相对比较模板化
t1:50
看错了数据范围
求n个点到给出的点哈夫曼距离的最小值
我想到的是一种非常zz的做法
我们二分答案,然后判断是否在这个距离内有点
但是这样前缀和不是很好维护
于是我们利用哈夫曼距离和切比雪夫距离的转化
(x+y,x-y)
然后就变成了简单的二维前缀和
另外坐标有负数,所以要都加一个值
其实有更简单的做法
直接做多源最短路就可以了
t2:100
首先我们可以按照ai排序
然后动态维护最小生成树(支持加边)
这个本身是lct裸题
但是因为这题目里有点数限制
所以我们可以暴力访问两点之间的路径
怎么找路径呢?(直接dfs就可以了)
t3:65
65就是个基本的暴力(因为没有时间就没有搞正解了)
首先我们要把撤销操作给搞掉
其实就是倒着访问搜索树
然后就变成了维护颜色
然后我们发现那个操作是等价于对二分图的点搞
所以按照行+列分类
然后问题就变成了子矩形覆盖查询最终颜色的问题
注意这个东西是不能直接树套树维护的
因为并不能保证先后顺序
可行的树套树维护方案是
我们倒着做,那么每个点被第一次覆盖就是最终颜色
于是这个是经典的线段树问题了,记录区间内是否有没有覆盖颜色的地方
复杂度n^2log^2
另外题解给出了并查集的维护方法
考虑如果是序列问题
维护每一个下一个没有凃颜色的地方
本质和树套树是一样的
然后推广到二维就直接暴力推广
复杂度(nq+n^2)*logn
下面这个是代码
#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
#define mid ((h+t)>>1)
char c;
const int N=;
const int N2=2e6;
bool f[N][N],ans[N2];
bitset<> g[][N][N];
struct re{
int a,b,c,d,e;
}a[N2],b[N2];
int n,m;
void fz(int h,int t,int h1,int t1)
{
dep(i,mid,h)
dep(j,m,)
{
g[][i][j]=;
if (f[i][j])
{
if (i==mid) g[][i][j][j]=;
if (j+<=m&&f[i][j+]) g[][i][j]|=g[][i][j+];
if (i+<=mid&&f[i+][j]) g[][i][j]|=g[][i+][j];
}
}
rep(i,mid,t)
rep(j,,m)
{
g[][i][j]=;
if (f[i][j])
{
if (i==mid) g[][i][j][j]=;
if (j->=&&f[i][j-]) g[][i][j]|=g[][i][j-];
if (i->=mid&&f[i-][j]) g[][i][j]|=g[][i-][j];
}
}
int h2=h1-,t2=t1+;
rep(i,h1,t1)
{
if (a[i].a<=mid&&a[i].c>=mid)
ans[a[i].e]=(g[][a[i].a][a[i].b]&g[][a[i].c][a[i].d]).any();
else if (a[i].c<mid) b[++h2]=a[i];
else b[--t2]=a[i];
}
rep(i,h1,h2) a[i]=b[i];
if (h<=mid-) fz(h,mid-,h1,h2);
rep(i,t2,t1) a[i]=b[i];
if (mid+<=t) fz(mid+,t,t2,t1);
}
int main()
{
freopen("boardgame.in","r",stdin);
freopen("boardgame.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>m;
rep(i,,n)
{
rep(j,,m)
{
cin>>c;
if (c=='.') f[i][j]=;
else f[i][j]=;
}
}
int k;
cin>>k;
rep(i,,k)
{
int x,y,x1,y1;
cin>>x>>y>>x1>>y1;
a[i].a=x; a[i].b=y; a[i].c=x1; a[i].d=y1; a[i].e=i;
}
fz(,n,,k);
rep(i,,k)
if (ans[i]) printf("Yes\n");
else printf("No\n");
return ;
}
其实我们有更优秀的方法来解决大范围问题
矩形问题还是应该多考虑一下扫描线
于是现在我们要维护的其实是每个点出现颜色的最晚的值
这个我们可以线段树套平衡树来维护
(注意具体的我们要标记永久化来维护,因为这个标记是不支持down的)
于是假设不是要求出所有位置的颜色
我们的复杂度就是qlog^2了
相比之前的有很大进展
另外要注意一下这个东西不能用kd-tree来做
我写完才发现很有问题。。
kd-tree支持的操作是,修改一定要对在kd-tree上的点进行修改
也就是说kd-tree维护的是单点修改区间查询操作
而这道题如果要维护就得把所有点加入
而kd-tree的最坏复杂度是sqrt(n) 此时n=n^2
所以退化成暴力
day3:280
我感觉是非常zz的一天
考完???为什么两道线段树 然后正解都不需要这个东西
第一题瞎模拟就不说了
第二题其实很简单,想复杂了
支持三个操作
1.在某一个邮箱放一封新的信
2.删除某个邮箱里的所有信
3.删除前k封信
我都已经忘记我怎么想出来这么zz的线段树了
正解就是对于删前k封信这个操作记录一下
然后对删某个邮箱里的信暴力进行(先把那个标记进行一下)
因为每个信最多被删一次,所以就是O(n)的了
然后写线段树的时候
我写了个dfs函数,当f[x]==0的时候才停止
也就是说查到了h==t的点的儿子
于是造成了需要8倍空间的事情
而我只写了4倍空间 就炸了20分
第三题 还是比较水的
我们枚举它最终降到几分
那么比它低的肯定就比它低了
对于比它高的,我们肯定要让比较容易翻车的先翻车
然后 我考场上想的是
插入到线段树里,用线段树二分来做这个东西
虽然复杂度和正解是一样的nlogn 但现在想想非常zz
·
清北合肥day2-day5的更多相关文章
- 清北澡堂 Day2 下午 一些比较重要的数论知识整理
1.欧拉定理 设x1,x2,.....,xk,k=φ(n)为1~n中k个与n互质的数 结论一:axi与axj不同余 结论二:gcd(axi,n)=1 结论三:x1,x2,...,xk和ax1,ax2, ...
- 清明培训 清北学堂 DAY2
今天是钟皓曦老师的讲授~~ 总结了一下今天的内容: 数论!!! 1.整除性 2.质数 定义: 性质: 3.整数分解定理——算数基本定理 证明: 存在性: 设N是最小不满足唯一分解定理的整数 (1) ...
- 清北学堂Day2
算数基本定理: 1.整数及其相关 2.唯一分解定理 对于任意的大于1的正整数N,N一定能够分解成有限个质数的乘积,即 其中P1<P2<...<Pk,a1,a2,...,ak>= ...
- 清北澡堂 Day2 上午 一些比较重要的关于数论的知识整理
1.算数基本定理: 对于任意的大于1的正整数N,N一定能够分解成有限个质数的乘积,即 其中P1<P2<...<Pk,a1,a2,...,ak>=1; 证: 存在性: 若存在最小 ...
- 五一培训 清北学堂 DAY2
今天还是冯哲老师的讲授~~ 今日内容:简单数据结构(没看出来简单qaq) 1.搜索二叉树 前置技能 一道入门题在初学OI的时候,总会遇到这么一道题.给出N次操作,每次加入一个数,或者询问当前所有数的最 ...
- 清北合肥day1
题目: 1.给出一个由0,1组成的环 求最少多少次交换(任意两个位置)使得0,1靠在一起 n<=1000 2.两个数列,支持在第一个数列上区间+1,-1 每次花费为1 求a变成b的最小代价 n& ...
- 2017.10.5北京清北综合强化班DAY5
拼不出的数lost.in/.out/.cpp[问题描述]3 个元素的集合{5, 1,2} 的所有子集的和分别是0,1, 2, 3, 5, 6, 7, 8.发现最小的不能由该集合子集拼出的数字是4.现在 ...
- 8月清北学堂培训 Day5
今天是杨思祺老师的讲授~ 最短路练习题: POJ 1125 Stockbroker Grapevine 有 N 个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径.现在有一个消息要由某个人开 ...
- 北京清北 综合强化班 Day5
T1 思路: 输入数据,sort一下, 如果a[i]>sum+1(前缀和) 那么sum+1就一定不会被拼出来, 然后输出即可. 上代码: #include <iostream> #i ...
随机推荐
- Holedox Eating HDU - 4302 2012多校C 二分查找+树状数组/线段树优化
题意 一个长度$n<=1e5$的数轴,$m<=1e5$个操作 有两种一些操作 $0$ $x$ 在$x$放一个食物 $1$ 一个虫子去吃最近的食物,如果有两个食物一样近,不转变方向的去吃 ...
- 使用python调用淘宝的ip地址库查询接口结合zabbix判断dnspod域名解析是否正确
#encoding:utf-8 import socket import requests import json ''' 使用python结合zabbix判断dnspod域名解析是否正确 服务器分国 ...
- Redis持久化存储(AOF与RDB两种模式)
Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一 ...
- Jmeter下载安装配置及使用(windows)
1 前言 仅作为记录使用. 2 步骤 2.1 下载地址:http://jmeter.apache.org/download_jmeter.cgi 2.2 选择binary版本即可:apache-jme ...
- [加密算法]为什么说RSA难以被破解
RSA算法运用了数学“两个大的质数相乘,难以在短时间内将其因式分解”的这么一套看似简单事实上真的是很困难的一个数学难题...... 以前也接触过RSA加密算法,感觉这个东西太神秘了,是数学家的事,和我 ...
- linux软件安装、rpm操作命令、本地yum配置(有什么用)
1.yum是什么? yum的全称是yellow dog updater,modified,是一个shell前端软件包管理器;基于RPM包管理,能够从指定的服务器下载RPM包并自动安装,可以自动处理依赖 ...
- 深入理解ajax
http://www.imooc.com/code/13468 基础练习 http://www.imooc.com/video/5644 !ajax! 常用 for ...
- Confluence 6 用户目录图例 - 和 Jira 连接到 Crowd
上面的图:Confluence, JIRA 和其他应用程序连接到 Crowd 作为用户管理. https://www.cwiki.us/display/CONF6EN/User+Managemen ...
- AFN 请求报 415错误解决方案
使用 AFHTTPSessionManager 发起请求时 设置下面两句代码 manager.requestSerializer = [AFJSONRequestSerializer seriali ...
- shell中的ps命令详解
ps简介:Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的 ...