Mutual Training for Wannafly Union #6
A
=w=
B
QvQ
C
题意:有长度为n的序列(n<=5e5),求满足条件的a,b,c,d的组数,要求满足条件:min([a,b])<=min([c,d]),a<=b<c<=d
分析:数据结构(set+BIT)
不妨把所有点按照从小到大的顺序加入数组
那么当一个数x进入数组时候,已经在数组里的数一定小于等于它
我们考虑以x为min([a,b])的方案数
很明显我们可以找到该位置的l和r(set)
那么a只能在l~x之间,b只能在x~r之间,而c,d只能在空隙之中
用乘法原理计数,关键问题就是计算r后面的所有空隙对答案的贡献
这个贡献可以用树状数组来维护
c[i]表示i位置的板子到前驱板子之间的空隙对答案的贡献,那么对于每次询问,计算r后面的所有空隙对答案的贡献就是query(n+1)-query(r)
对于每个修改,x插入到l和r之间,c[l]值不需要改变,c[x]值加上l~x长度的贡献,c[r]需要减去原来l~r长度的贡献,再加上x~r长度的贡献
D
题意:T组数据,n*m的格子(T,n,m<=1000),将1~n*m填入这些格子中,规定位置(i,j)的高度为(i xor j),要求若位置A的高度严格大于位置B,那么A中的数字也必须严格大于B中的数字,求放置方案数
分析:各种方法
对于极限情况,异或值最大为1023
如果我们按照i xor j对所有位置排序,那么异或值相同的位置必定只能取1~n*m中连续的一段,所以如果p[x]表示异或值为x的位置有多少个,那么答案就是π(p[x]!) (0<=x<=1023)
方法一:暴力
有了上面的结论,很直观的想法就是对于每组数据,直接n*m统计xor值,时间复杂度O(TNM),是1e9级别的,但是因为运算是异或,所以跑得过,而且跑得十分快……
方法二:离线+二维树状数组
将询问离线,枚举每个异或值x,计算各个询问中该异或值出现了多少个
这相当于提前预处理得到每个异或值x的出现位置有哪些,用vector记下来
然后对于每个枚举的x,把那些位置在二维数组中标1,其他标0,
对于每个询问T的n和m,也就是询问[1,n][1,m]数组的和,这当然可以用二维树状数组完成
O(T*1023*logn*logm),最坏是1e8级别的,实际和暴力时间差不多
方法三:数位dp
dp[i][j][k][l]表示前i位,第一个数字是否有限制,第二个数字是否有限制,当前异或值为l的方案数
O(T*10*2*2*1023*2*2),大概是1e8级别的,实际跑很慢,比暴力慢
方法四:FWT
设s[x]表示异或值x出现的个数
那么计算方法是s[x]=Σf[i]*g[j] (i xor j==x),此题中f[i]=i,g[j]=j
这种卷积不再是i+j==x,而是i xor j==x,可以用FWT优化到nlogn的
那么复杂度就是O(Tnlogn)是1e7级别的,实际跑得是最快的
另外,FWT还可以处理OR、AND、~AND、~OR、~XOR
E
WVW
F
待填坑
Mutual Training for Wannafly Union #6的更多相关文章
- 【Mutual Training for Wannafly Union #1 】
A.Phillip and Trains CodeForces 586D 题意:过隧道,每次人可以先向前一格,然后向上或向下或不动,然后车都向左2格.问能否到达隧道终点. 题解:dp,一开始s所在列如 ...
- Mutual Training for Wannafly Union #1解题报告
---恢复内容开始--- q神等人组织的vjudge上的多校训练,题目基本上都来自于CF,#1是上周进行的,参加后感觉收获很多,因为上周准备期中比较忙,解题报告现在补上. 比赛地址(兼题目地址) A题 ...
- Mutual Training for Wannafly Union #6 E - Summer Trip(并查集)
题目链接:http://www.spoj.com/problems/IAPCR2F/en/ 题目大意: 给m个数字代表的大小,之后n组数据,两两关联,关联后的所有数字为一组,从小到大输出组数以及对应的 ...
- Mutual Training for Wannafly Union #2
codeforces 298A. Snow Footprints 分类讨论三种情况: ①..RRRRRR… ②..LLLLLLL… ③..RRRLLLL.. //AC by lwq: #includ ...
- Mutual Training for Wannafly Union #8 D - Mr.BG Hates Palindrome 取余
Mr.BG is very busy person. So you have been given enough time (1000 milliseconds) to help him. Mr. B ...
- Mutual Training for Wannafly Union #9
A(SPOJ NPC2016A) 题意:给一个正方形和内部一个点,要求从这个点向四边反射形成的路线的长度 分析:不断做对称,最后等价于求两个点之间的距离 B(CF480E) 题意:求01矩阵内由0组成 ...
- Mutual Training for Wannafly Union #5
A(UVA12336) 题意:给一个n*m(n,m<=1e5)的棋盘,棋盘上有一些障碍点不能放棋子,现在要在棋盘上放4个棋子,满足A->B->C->D->A,其中走的规则 ...
- Wannafly Union Goodbye 2016
A 题意:平面上有n个点(n<=100000),给你一个p(20<=p<=100) 判断是否存在一条直线至少过[np/100](向上取整)个点,时限20s,多组数据 分析:概率算法 ...
- Wannafly Union#1
题目链接:http://vjudge.net/contest/142053#overview A.题意:有一个3*n的隧道,人和车轮流走,人先向右走一步,然后选在是在原地不动还是上下移动一格,之后车开 ...
随机推荐
- thinkphp5 分页 paginate
tp5分页带参数的时候,用到 paginate 后面的几个参数 paginate有三个参数, 第一个必须表是每页分多少个[如果配置文件中设置了,可以不用] 第二个参数表是的是简洁分页,如果为true, ...
- KMP POJ 1961 Period
题目传送门 /* 题意:求一个串重复出现(>1)的位置 KMP:这简直和POJ_2406没啥区别 */ /******************************************** ...
- Android 性能优化(5)网络优化 (1) Collecting Network Traffic Data 用Network Traffic tool :收集传输数据
Collecting Network Traffic Data 1.This lesson teaches you to Tag Network Requests 标记网络类型 Configure a ...
- Tuple类型的使用
1.什么是Tuple Tuple类型,可以存放任何类型 2.Tuple有哪些分类 .Net 4.0 定义了8个泛型Tuple类,和一个Tuple静态类 3.Tuple的使用
- CF869C The Intriguing Obsession
思路: 分别在两种不同颜色的岛屿群之间进行搭桥.因为相同颜色的岛屿之间不能有边,任意两个相同颜色的岛屿不能同时和另外一个不同颜色的岛屿都有边.实现: #include <bits/stdc++. ...
- ubuntu下编译VLC源码
http://blog.csdn.net/beitiandijun/article/details/9225591ubuntu下编译VLC源码 分类: 视频处理 2013-07-02 17:33 57 ...
- select count(1) 和 select count(*)的区别
统计一个表T有多少行数据,通常写法是: 查询A:select count(*) from T 但也可以采用下面语句来查: 查询B:select count(1) from T 结果通常是一样的.那么二 ...
- sql server truncate table 删除表数据限制条件
truncate 注释 注释TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快 ...
- 【Linux】Ubuntu下C语言访问MySQL数据库入门
使用的系统是Ubuntu 11.10.数据库是MySQL. MySQL数据库环境配置 首先需要安装MySQL客户端和服务器,命令行安装方式为: sudo apt-get install mysql-s ...
- CAD实现文档坐标到视区坐标的转换(com接口Delphi语言)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...