hihocoder1236(北京网络赛J):scores 分块+bitset
北京网络赛的题- -。当时没思路,听大神们说是分块+bitset,想了一下发现确实可做,就试了一下,T了好多次终于过了
题意:
初始有n个人,每个人有五种能力值,现在有q个查询,每次查询给五个数代表查询的五种能力值,输出有多少个人每种能力值都比查询的小
n和q都是50000,每种能力值最大也为50000
思路:
对于某一个大小的能力值,有哪些人的此项能力值比他小可以用一个50000的bitset表示。这样我们在查询的时候就可以拿到5个对应的bitset,对其进行and就可以得出最终的人数
这样每组询问的复杂度为5*n/32 总复杂度较高但勉强可以接受。
但是这样做有一点问题就是要开5*50000个大小为50000的bitset,显然这样会超内存。。于是想到将bitset分块,这样虽然询问时需要花费一定时间(sqrt)来找到5个bitset
但是显然这个时间是小于n/32的,所以并不会对总时间造成较大的影响,于是显然可行
注意一点就是分块的时候不仅要按照分数段分块,还要按照人数分块,否则如果某个分数段人数太多就gg了
代码:
#include <bits/stdc++.h>
using namespace std;
bitset<>b[][];
bitset<>tmp;
int n,m,q;
int a[][];
vector<int>v[][];
bitset<>p[];
int tt=;
int now[];
vector<int>d[];
int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=; i<; i++)
{
d[i].clear();
for(int j=; j<=m; j++)
{
v[i][j].clear();
}
}
for(int i=;i<;i++)
{
for(int j=;j<=;j++)
{
b[i][j].reset();
}
}
for(int i=; i<n; i++)
{
for(int j=; j<; j++)
{
scanf("%d",a[i]+j);
v[j][a[i][j]].push_back(i);
}
}
int tm=;
for(int i=; i<; i++)
{
tm=;
tmp.reset();
b[i][]=tmp;
d[i].push_back();
for(int j=; j<=m; j++)
{
for(int to:v[i][j])
{
tmp[to]=;
tm++;
}
if(tm>sqrt(n)||j-d[i][(int)d[i].size()-]>sqrt(m)||j==m)
{
b[i][(int)d[i].size()]=tmp;
d[i].push_back(j);
tm=;
}
}
}
scanf("%d",&q);
int pre=;
tm=;
while(q--)
{
for(int i=; i<; i++)
{
scanf("%d",now+i);
now[i]^=pre;
}
for(int i=; i<; i++)
{
int kk=upper_bound(d[i].begin(),d[i].end(),now[i])-d[i].begin();
kk--;
p[i]=b[i][kk];
for(int j=d[i][kk]+; j<=now[i]; j++)
{
for(int to:v[i][j])
{
p[i][to]=;
}
}
//p&=tmp;
}
for(int i=;i<;i++)
{
p[]&=p[i];
}
int ans=p[].count();
pre=ans;
printf("%d\n",ans);
}
}
return ;
}
hihocoder1236(北京网络赛J):scores 分块+bitset的更多相关文章
- hihocoder 1236(2015北京网络赛 J题) 分块bitset乱搞题
题目大意: 每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数 因为强行要求在线查询,所以题目要求,每次当前给 ...
- 2015北京网络赛 J Scores bitset+分块
2015北京网络赛 J Scores 题意:50000组5维数据,50000个询问,问有多少组每一维都不大于询问的数据 思路:赛时没有思路,后来看解题报告也因为智商太低看了半天看不懂.bitset之前 ...
- 2015北京网络赛 J Clarke and puzzle 求五维偏序 分块+bitset
Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc20 ...
- 2017北京网络赛 J Pangu and Stones 区间DP(石子归并)
#1636 : Pangu and Stones 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Chinese mythology, Pangu is the fi ...
- 2015北京网络赛 Couple Trees 倍增算法
2015北京网络赛 Couple Trees 题意:两棵树,求不同树上两个节点的最近公共祖先 思路:比赛时看过的队伍不是很多,没有仔细想.今天补题才发现有个 倍增算法,自己竟然不知道. 解法来自 q ...
- luogu 1327 数列排序 & 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 J题 循环节
luogu 1327 数列排序 题意 给定一个数列\(\{an\}\),这个数列满足\(ai≠aj(i≠j)\),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换? ...
- 2015北京网络赛 D-The Celebration of Rabbits 动归+FWT
2015北京网络赛 D-The Celebration of Rabbits 题意: 给定四个正整数n, m, L, R (1≤n,m,L,R≤1000). 设a为一个长度为2n+1的序列. 设f(x ...
- HDU-4041-Eliminate Witches! (11年北京网络赛!!)
Eliminate Witches! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 2017乌鲁木齐网络赛 j 题
题目连接 : https://nanti.jisuanke.com/t/A1256 Life is a journey, and the road we travel has twists and t ...
随机推荐
- TCP 连接的要点
概念 TIME_WAIT: socket 仍然有数据在内核中待发送直到发送成功或超时,此socket不能被内核删除,同时等待是否要重传Ack对端还已发过来的FIN Linger Time:socket ...
- jQuery代码优化 事件委托篇
<转自 http://www.jb51.net/article/28770.htm> 参考文章: 解密jQuery事件核心 - 绑定设计(一) 参考文章: 解密jQuery事件核心 - ...
- 我也要这样写define、、
今天在TCO1B看到这位大神的代码,简直醉了,当需要手速的时候可以考虑使用一下.. #define V(x) vector<x > #define vs V(string) #define ...
- 堆和栈 内存分配 heap stack
Java中的堆和栈 在[函数]中定义的一些[基本类型的变量]和[对象的引用变量]都是在函数的[栈内存]中分配的.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间, ...
- codevs 4909 寂寞的堆(写的好丑0.0)
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #defin ...
- Java POI 导出excel表
1.首先下载poi-3.6-20091214.jar,下载地址如下: http://download.csdn.net/detail/evangel_z/3895051 2.Student.java ...
- 简易google地图api调用
代码如下: <!DOCTYPE html> <html> <head> <meta name="viewport" content=&qu ...
- 关于异常的疑难解答:System.Runtime.InteropServices.COMException
COMException exception is thrown when an unrecognized HRESULT is returned from a COM method call.&qu ...
- .Net程序员关于微信公众平台测试账户配置 项目总结
今天项目第一次验收,夜晚吃过晚饭后,想把项目中用到的关于微信配置总结一下,虽然网上关于这方面的资料很多很多,还有官方API,但是总感觉缺点什么,就像期初做这个项目时,各方面找了很久的资料,说说配置吧! ...
- C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体
//浏览图片 private void btnUp_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialo ...