大爷的字符串题

题目背景

在那遥远的西南有一所学校,

/*被和谐部分*/

然后去参加该省省选虐场,

然后某蒟蒻不会做,所以也出了一个字符串题:

题目描述

给你一个字符串 a a a,每次询问一段区间的贡献。

贡献定义:

每次从这个区间中拿出一个字符 x x x ,然后把 x x x 从这个区间中删除,直到区间为空。你要维护一个集合 S S S。

  • 如果 S S S 为空,你 rp 减 1 1 1。
  • 如果 S S S 中有一个元素不小于 x x x,则你 rp 减 1 1 1,清空 S S S。
  • 之后将 x x x 插入 S S S。

由于你是大爷,平时做过的题考试都会考到,所以每次询问你搞完这段区间的字符之后最多还有多少 rp?rp 初始为 0 0 0。

询问之间不互相影响~

输入格式

第一行两个整数 n n n, m m m,表示字符串长度与询问次数。

之后一行 n n n 个数,第 i i i 个整数表示给出的字符串的第 i i i 个字符 x i x_i xi​。

接下来 m m m 行,每行两个整数 l , r l, r l,r,表示一次询问的区间。

输出格式

对于每次询问,输出一行一个整数表示答案。

样例 #1

样例输入 #1

3 3
3 3 3
3 3
3 3
3 3

样例输出 #1

-1
-1
-1

提示

数据规模与约定

  • 对于 10 % 10\% 10% 的数据,是样例。
  • 对于另外 10 % 10\% 10% 的数据,保证 n , m ≤ 100 n,m \le 100 n,m≤100;
  • 对于另外 10 % 10\% 10% 的数据,保证 n , m ≤ 1 0 3 n,m \le 10^3 n,m≤103;
  • 对于另外 10 % 10\% 10% 的数据,保证 n , m ≤ 1 0 4 n,m \le 10^4 n,m≤104;
  • 对于另外 10 % 10\% 10% 的数据,保证 n , m ≤ 1 0 5 n,m \le 10^5 n,m≤105;
  • 对于 100 % 100\% 100% 的数据, 1 ≤ n , m ≤ 2 × 1 0 5 1 \leq n,m \le 2 \times10^5 1≤n,m≤2×105, 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1≤ai​≤109, 1 ≤ l , r ≤ n 1 \leq l, r \leq n 1≤l,r≤n。

保证数据像某省省选 day1T2 一样 sb,大家尽情用暴力水过题吧!

没事,你只要在一个好学校,就算这题只能拿到 10 分,也可以进队了

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
typedef long long ll;
int n,m,a[N];
unordered_map<int,int> mp;
int pos[N],Id=0;
int c[N],sum=0,num[N],ans[N],L=1,R=0;
//题意:求区间众数出现的次数的相反数
struct modui{int l,r,id;
}s[N];
bool cmp(modui x,modui y){//按左端点分块,然后在同一个块当中区间右端点要递增if (pos[x.l]!=pos[y.l]) return x.l<y.l;if(pos[x.l]&1) return x.r<y.r;//奇偶性优化return x.r>y.r;//都是为了加速
}
//c[i]代表i出现的次数
//num[i]代表出现次数为i的数的个数
void add(int x){//增加一个数,计数器删除原来次数的出现次数,更新现在的次数,更新答案--num[c[x]];++c[x];++num[c[x]];sum=max(sum,c[x]);//如果比当前众数出现的次数多,那么更新答案
}
void del(int x){//删除一个数,计数器更新原来的出现次数,更新现在的次数,再更新答案--num[c[x]];if(c[x]==sum){//如果只有一个众数,删除这个数后,答案必定减1if(num[c[x]]==0) sum--;}--c[x];++num[c[x]];sum=max(sum,c[x]);//如果比当前众数出现的次数多,那么更新答案
}
void query(int l,int r,int id){while (L<l) del(a[L++]);//左指针往右移删除while (L>l) add(a[--L]);//左指针往左移加入while (R<r) add(a[++R]);//右指针往右移加入while (R>r) del(a[R--]);//右指针往左移删除ans[id]=sum;//记录答案return;
}
int main(){scanf("%d%d",&n,&m);int dis=sqrt(n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);if(mp[a[i]]) a[i]=mp[a[i]];//离散化else mp[a[i]]=++Id,a[i]=Id;pos[i]=(i-1)/dis+1;//分块}for(int i=1;i<=m;i++){scanf("%d %d",&s[i].l,&s[i].r);s[i].id=i;}sort(s+1,s+1+m,cmp);for(int i=1;i<=m;i++) query(s[i].l,s[i].r,s[i].id);for(int i=1;i<=m;i++) printf("%d\n",-ans[i]);return 0;
}

P3709 大爷的字符串题(莫队+离散)相关推荐

  1. P3709 大爷的字符串题【普通莫队】

    传送门 给定一个长度为NNN的数组,求区间l∼rl \sim rl∼r任意排序后,最小严格递增序列的个数(=区间众数) 分析 就是求l∼rl \sim rl∼r 区间的众数,离线,不修改 考虑莫队 增 ...

  2. 莫队算法(普通莫队、带修莫队、树上莫队、不删除莫队)学习笔记【理解+套路/核心代码+例题及题解】

    一.理解 我的理解就是巧妙的暴力,利用双指针以及分块思想,巧妙的移动双指针,时间复杂度可以达到O(NlogN). 强推博客:写的又好又全.链接 二.套路 1.普通莫队 [1]核心代码 bool cmp ...

  3. P3246 [HNOI2016]序列 莫队 + ST表 + 单调栈

    传送门 文章目录 题意: 思路: Update 题意: 思路: 比较神奇的一个题,这里先介绍莫队的离线解法. 不难发现,用莫队来做最大的难点就是在进行区间移动的时候如何快速计算贡献. 比如[l,r]− ...

  4. #199-【莫队】小Z的袜子

    Description Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- ...

  5. 数据结构题(莫队算法)

    数据结构题 题目: 问在区间[l,r]和[l1,r1]内x的出现次数的乘积是多少? 题解: 莫队算法的模板题 关于莫队算法你可以参考这个 我这里简单的说说我对莫队的理解: 莫队是一个优雅的暴力,就是将 ...

  6. 牛客练习赛85 数学家的迷题 (带修莫队/线段树)

    题意: 1:将a[id]a[id]a[id]的值改为xxx. 2:令t=a[l]×a[l+1]×...×a[r−1]×a[r]t=a[l]×a[l+1]×...×a[r−1]×a[r]t=a[l]×a ...

  7. [国家集训队]数颜色 / 维护队列 (带修莫队模板题)

    题意: 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. ...

  8. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 9894  Solved: 4561 [Su ...

  9. HDU - 6333 Problem B. Harvest of Apples(莫队变形+思维+组合数学,好题)

    题目链接:点击查看 题目大意:给出n个苹果树,每个苹果树上可以摘一个苹果,问摘不超过m个苹果有多少种方式 题目分析:首先根据题意和样例可以推出,答案就是一个组合数之和,设C(n,m)为从n个数中选m个 ...

最新文章

  1. AI一分钟 | Windows负责人离职;华为2017年收入6036亿元,净利475亿元
  2. 转:centos7 安装与使用 postgreSQL
  3. aapt: error while loading shared libraries: libstdc++.so.6: wrong ELF class: ELFCLASS64
  4. c语言格式化字符漏洞,格式化字符串漏洞题目练习
  5. 2017北理c语言答案,c语言答案 北理工
  6. 女朋友生气了,日常生活中该具体怎么做才好,才好女朋友开心?
  7. android系统里面的mic是哪个app_安利 | 那些错过会后悔一年的法语APP
  8. 从零开始学PowerShell(1)初见基础命令
  9. 25.go doc 与 godoc
  10. 面试题:原型Bean在一个线程多次获取是否一样?
  11. python爬取b站弹幕分析_Python爬取分析B站动漫《柯南》弹幕,从数据中分析接下来的剧情...
  12. 伯爵写给女巫的一封信
  13. SD卡插入手机容量变小,U盘低级格式化HA-LLFTOOL
  14. 基于汇编实现的欢乐QQ堂小游戏 附完整代码
  15. 基于云服务创建离线数据统计分析服务(一)
  16. Java鸡兔同笼问题
  17. 我的世界java版的马难以驯服_我的世界:这几种生物很难驯服,最难搞定的就是它了!...
  18. 有用的Linux操作系统的基础命令总结
  19. 基于Wemos D1避障WiFi小车及智能垃圾桶设计
  20. 易助erp系统服务器安装,ERP教学-易助ERP系统在采购底稿中增加毛需求量实际库存量预计入...-系统,采购,底稿,增加,需求量 - 木夕网络资源分享平台...

热门文章

  1. 阿里巴巴实习生校招笔试(技术类)2021.4.9场
  2. r语言怎样调换两列的顺序
  3. 芯片设计:常用英语名词
  4. 一个月的电子助理工程师的实习体验
  5. python埃及分数式_埃及分数
  6. 逐个试探法_在线促销游戏的基本设计试探法
  7. 过程控制系统期末试题
  8. 7月29日绝地求生服务器维护,绝地求生7月29日正式服维护公告内容一览
  9. 读Training Strategies for Improved Lip-Reading论文
  10. QEMU + ARMv8 环境搭建