LOJ-6285-数列分块入门9
链接:
题意:
给出一个长为 的数列,以及 个操作,操作涉及询问区间的最小众数。
思路:
vector维护每个值的出现位置, 预处理第i快到第j块 的众数,然后对不成块的跑暴力,
数组开小了一直wa..找题解,好多题解代码也过不了...
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
//#include <memory.h>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#include <math.h>
#include <stack>
#include <string>
#include <assert.h>
#include <iomanip>
#define MINF 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int MAXN = 1e5+10;
const int MOD = 10007;
int a[MAXN], b[MAXN], Tag[MAXN];
int Num[MAXN];
int Dp[2010][2010];
int Belong[MAXN];
bool Vis[MAXN];
vector<int> Number[MAXN];
int n, part, pos;
inline int read()
{
int ret = 0, c, f = 1;
for(c = getchar(); !(isdigit(c) || c == '-'); c = getchar());
if(c == '-') f = -1, c = getchar();
for(; isdigit(c); c = getchar()) ret = ret * 10 + c - '0';
if(f < 0) ret = -ret;
return ret;
}
void Init(int x)
{
int MaxNum = 0;
int Mode = 0;
memset(Num, 0, sizeof(Num));
for (int i = (x-1)*part+1;i <= n;i++)
{
int p = Belong[i];
Num[a[i]]++;
if (Num[a[i]] > MaxNum)
{
MaxNum = Num[a[i]];
Mode = a[i];
}
if (Num[a[i]] == MaxNum && Mode > a[i])
Mode = a[i];
Dp[x][p] = Mode;
}
}
int GetCnt(int l, int r, int v)
{
// int lp = lower_bound(Number[v].begin(), Number[v].end(), l)-Number[v].begin();
// int rp = upper_bound(Number[v].begin(), Number[v].end(), r)-Number[v].begin();
// return rp-lp+1;
vector<int>::iterator x = upper_bound(Number[v].begin(), Number[v].end(), r);
vector<int>::iterator y = lower_bound(Number[v].begin(), Number[v].end(), l);
return x - y ;
}
int Query(int l, int r)
{
int mode = Dp[Belong[l]+1][Belong[r]-1];
int MaxNum = GetCnt(l, r, mode);
memset(Vis, 0, sizeof(Vis));
Vis[mode] = 1;
for (int i = l;i <= min(Belong[l]*part, r);i++)
{
if (Vis[a[i]])
continue;
Vis[a[i]] = 1;
int cnt = GetCnt(l, r, a[i]);
if (cnt > MaxNum || (MaxNum == cnt && a[i] < mode))
{
MaxNum = cnt;
mode = a[i];
}
}
if (Belong[l] != Belong[r])
{
for (int i = max((Belong[r]-1)*part+1, l);i <= r;i++)
{
if (Vis[a[i]])
continue;
Vis[a[i]] = 1;
int cnt = GetCnt(l, r, a[i]);
if (cnt > MaxNum || (MaxNum == cnt && a[i] < mode))
{
MaxNum = cnt;
mode = a[i];
}
}
}
return mode;
}
int main()
{
// scanf("%d", &n);
n = read();
part = 80;
memset(Tag, -1, sizeof(Tag));
for (int i = 1;i <= n;i++)
{
// scanf("%d", &a[i]);
a[i] = read();
b[i] = a[i];
Belong[i] = (i-1)/part+1;
}
sort(b+1, b+1+n);
pos = unique(b+1, b+1+n)-(b+1);
for (int i = 1;i <= n;i++)
a[i] = lower_bound(b+1, b+1+pos, a[i])-b;
for (int i = 1;i <= Belong[n];i++)
Init(i);
for (int i = 1;i <= n;i++)
Number[a[i]].push_back(i);
int op, l, r, c;
for (int i = 1;i <= n;i++)
{
// scanf("%d%d", &l, &r);
l = read(), r = read();
printf("%d\n", b[Query(l, r)]);
}
return 0;
}
LOJ-6285-数列分块入门9的更多相关文章
- LOJ #6285. 数列分块入门 9-分块(查询区间的最小众数)
#6285. 数列分块入门 9 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2 题目描述 给 ...
- loj#6285 数列分块入门 9 ( 回 滚 )
题目 : 链接 :https://loj.ac/problem/6285 题意:给出一个长为 n的数列,以及 n个操作,操作涉及询问区间的最小众数. 思路:虽然这不是一道 回滚莫队题,就是 暴力分块 ...
- LOJ#6285. 数列分块入门 9
有点难..... 要求区间众数,所以我可以先把区间分块,然后我预处理出从第 i 块到第 j 块的众数,用dp[i][j]记录下来. 因为需要知道众数的num值, 所以我可以用一个vector来保存每个 ...
- LOJ6277~6285 数列分块入门
Portals 分块需注意的问题 数组大小应为,因为最后一个块可能会超出的范围. 当操作的区间在一个块内时,要特判成暴力修改. 要清楚什么时候应该+tag[t] 数列分块入门 1 给出一个长为的数列, ...
- LOJ #6284. 数列分块入门 8-分块(区间查询等于一个数c的元素,并将这个区间的所有元素改为c)
#6284. 数列分块入门 8 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2 题目描述 给出 ...
- LOJ #6283. 数列分块入门 7-分块(区间乘法、区间加法、单点查询)
#6283. 数列分块入门 7 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2 题目描述 给出 ...
- LOJ #6282. 数列分块入门 6-分块(单点插入、单点查询、数据随机生成)
#6282. 数列分块入门 6 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 1 题目描述 给出 ...
- LOJ #6281. 数列分块入门 5-分块(区间开方、区间求和)
#6281. 数列分块入门 5 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 5 题目描述 给出 ...
- LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)
#6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 题目描述 给出一个 ...
- LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))
#6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3 题目描述 给 ...
随机推荐
- Linux目录权限管理
Linux目录权限管理 实验目标: 通过本实验掌握centos7/rhel7目录权限的管理.包括配置目录的所属组.SGID.读/写/执行权限等. 实验步骤: 1.创建目录/home/instruc ...
- jmeter性能测试重要指标以及性能结果分析
一.Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告 如果大家都是做Web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Re ...
- 获取JSON中所有的KEY
采用递归的方式,遍历JSON中所有的KEY. JSON格式如下: {"username":"tom","age":18,"addr ...
- Laravel 查询&数据库&模型
1.with()与load区别: 都称为 延迟预加载,不同点在于 load()是在已经查询出来的模型上调用,而 with() 则是在 ORM 查询构造器上调用. Order::query()-> ...
- JavaScript中好用的对象数组去重
对象数组去重 Demo数据如下: var items= [{ "specItems": [{ "id": "966480614728069122&qu ...
- 批量删除Maven本地仓库中未下载完成的jar包(不完整的jar包)
1.删除repository库目录下所有后缀名是.lastUpdated的文件 2.进入maven本地仓库地址: CMD进入windows的路径(或在仓库目录的地址栏直接输入CMD,回车自动打开); ...
- 微信小程序打开地图选择位置
wx.getLocation({ type: 'wgs84', success(res) { const latitude = res.latitude const longitude = res.l ...
- Python之模块IO
目录 Python之模块IO io概叙 io类层次结构 io模块的类图 io模块的3种I/O 原始I/O,即RawIOBase及其子类 文本I/O,即TextIOBase及其子类 字节I/O(缓存I/ ...
- GoAccess安装
编译安装 yum install geoip-devel openssl-devel libmaxminddb-devel ncurses-devel bzip2-devel tokyocabinet ...
- MySQL性能优化(七):其它优化
原文:MySQL性能优化(七):其它优化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/v ...