题意:给出n<5e4,a[1...n],单次1e5总次1e6次查询除去区间(L,R)的数的个数

开场5分钟:莫队是不可能莫队的,这道题是不可能莫队的

最后1小时:真香

具体操作没啥特别的,注意一下add和del是和实际相反的操作,以及开区间特判

然而这是卡着过去的..

正解用裸主席树或其他dsa,只需把数组翻倍再拼接就好(我好菜啊

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<string>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<map>
#define rep(i,j,k) for(register int i=j;i<=k;i++)
#define rrep(i,j,k) for(register int i=j;i>=k;i--)
#define erep(i,u) for(register int i=head[u];~i;i=nxt[i])
#define print(a) printf("%lld",(ll)a)
#define println(a) printf("%lld\n",(ll)a)
using namespace std;
const int MAXN = 1e5+11;
typedef long long ll;
ll read(){
ll x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int freq[MAXN],cur[MAXN],curfreq[MAXN],f[MAXN];
int a[MAXN],ans[MAXN];
int tf[MAXN];
//,head[MAXN],tail[MAXN],ans[MAXN];
int n,m,size;
//int sumL[MAXN],sumR[MAXN];
struct QQQ{
int l,r,pos,flag;
}Q[MAXN];
bool cmp(QQQ a,QQQ b){
if(a.l/size!=b.l/size) return a.l/size<b.l/size;
else return a.r<b.r;
} int L,R,ANS;
void add(int cur){
//if(f[a[cur]]==0) ANS++;
f[a[cur]]--;
if(f[a[cur]]==0) ANS--;
}
void del(int cur){
if(f[a[cur]]==0) ANS++;
f[a[cur]]++;
}
int main(){
while(~scanf("%d%d",&n,&m)){
size=sqrt(n)+1;
rep(i,1,n) a[i]=read();
//memset(freq,0,sizeof freq);
//rep(i,1,n) freq[a[i]]++;
rep(i,1,m){
int l=read();
int r=read();
Q[i].l=l+1;
Q[i].r=r-1;
Q[i].pos=i;
if(l+1==r) Q[i].flag=0;
else Q[i].flag=1;
}
sort(Q+1,Q+1+m,cmp); L=1,R=n; ANS=0;
int AANS=0;
memset(tf,0,sizeof tf);
rep(i,1,n){
if(tf[a[i]]==0) AANS++;
tf[a[i]]++;
} memset(f,0,sizeof f);
// rep(i,1,n){
// if(f[a[i]]==0) ANS++;
// f[a[i]]++;
// }
rep(i,1,m){ if(Q[i].flag)while(L>Q[i].l){
L--;
add(L);
}
if(Q[i].flag)while(R<Q[i].r){
R++;
add(R);
}
if(Q[i].flag)while(L<Q[i].l){
del(L);
L++;
}
if(Q[i].flag)while(R>Q[i].r){
del(R);
R--;
}
if(Q[i].flag) ans[Q[i].pos]=ANS;
else ans[Q[i].pos]=AANS;
}
rep(i,1,m){
printf("%d\n",ans[i]);
}
}
return 0;
}

2018牛客多校1 - J Different Integers 莫队/主席树签到的更多相关文章

  1. 2018牛客多校2 - J farm 随机乱搞/二进制分组

    题意:给定n*m的格子,每个格子有不同的种类,q次操作,每次操作使[x1,y1]到[x2,y2]的格子除了k类型的以外都删除,最后单次询问所有格子被删了几个 官方题解提到了两种有意思的做法,随机和二进 ...

  2. 牛客多校第九场H Cutting Bamboos(主席树 区间比k小的个数)题解

    题意: 标记为\(1-n\)的竹子,\(q\)个询问,每次给出\(l,r,x,y\).要求为砍区间\(l,r\)的柱子,要求砍\(y\)次把所有竹子砍完,每次砍的时候选一个高度,把比他高的都砍下来,并 ...

  3. 牛客多校第四场sequence C (线段树+单调栈)

    牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...

  4. 2018牛客网暑期ACM多校训练营(第一场) J - Different Integers - [莫队算法]

    题目链接:https://www.nowcoder.com/acm/contest/139/J 题目描述  Given a sequence of integers a1, a2, ..., an a ...

  5. 牛客练习赛47 DongDong数颜色 (莫队算法)

    链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 5242 ...

  6. 牛客 40F 珂朵莉的约数 (莫队)

    珂朵莉给你一个长为n的序列,有m次查询 每次查询给两个数l,r 设s为区间[l,r]内所有数的乘积 求s的约数个数mod 1000000007 直接莫队暴力维护复杂度是$O(8m\sqrt{m})$. ...

  7. 2018牛客多校第四场 J.Hash Function

    题意: 给出一个已知的哈希表.求字典序最小的插入序列,哈希表不合法则输出-1. 题解: 对于哈希表的每一个不为-1的数,假如他的位置是t,令s = a[t]%n.则这个数可以被插入当且仅当第s ~ t ...

  8. 2018牛客多校6 - I Team Rocket KD树维护空间

    题意:给出n条铁路区间\([L,R]\),共有m个boom依时间顺序放置在\(k_i\)中,区间与\(k_i\)有交集的都被炸掉 求每次炸掉的铁路个数和最后输出所有id被炸的时间点 炸弹能炸到的区间满 ...

  9. 2018牛客多校第五场 E.room

    题意: 一共有n个宿舍,每个宿舍有4个人.给出第一年的人员分布和第二年的人员分布,问至少有多少人需要移动. 题解: 对于第一年的每个宿舍,向今年的每种组合连边.流量为1,费用为(4 - 组合中已在该宿 ...

随机推荐

  1. Oracle 用户验证日志

    1.sysdba/sysoper 权限用户验证日志;2.非sysdba/sysoper 权限用户验证日志;3.关于sqlcode; 1.sysdba/sysoper 权限用户验证日志:在数据库设置了参 ...

  2. hdu Lovekey(水题)

    #include<stdio.h> #include<string.h> ]; int main() { ],s2[]; int l1,l2,i,j,k; while(scan ...

  3. C# 判断是否是在设计模式下有效的方法

    public static bool IsDesignMode() { bool returnFlag = false; #if DEBUG if (LicenseManager.UsageMode ...

  4. java.awt.Graphics2D 图片缩放

    关键字:java image  thumbnail  google 粗略demo: import java.awt.Graphics2D; import java.awt.GraphicsConfig ...

  5. java中关于Collection和Map相关的类&接口之间的关系

    上图(引用自)

  6. 11、Semantic-UI之分割线

    11.1 分割线的定义 示例:定义分割线 分割线 <div class="ui divider"></div> 竖线并加入or <div class= ...

  7. Spring Boot专题背景简介

    鄙人13年毕业,不曾在圈子里写过总结,因此文笔颇不自信. 但人生永远没有太晚的开始,现在开始做些笔记,借此巩固下学到的新知识. 一些题外话: 前段时间,做个小项目,由于某些原因,使用Java来写(之前 ...

  8. SqlServer发布订阅

    我们在开发系统的时候,经常会遇到高并发的问题,还有高可用性和安全性方面的考虑,需要用读写分离的方案来解决问题.也就是在我们使用数据库比较多,更新少而查询比较多的情况下使用读写分离,实现提高性能,减少数 ...

  9. FPN(feature pyramid networks)

    多数的object detection算法都是只采用顶层特征做预测,但我们知道低层的特征语义信息比较少,但是目标位置准确:高层的特征语义信息比较丰富,但是目标位置比较粗略.另外虽然也有些算法采用多尺度 ...

  10. Mysql数据操作《二》单表查询

    单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 关键字的执行 ...