题意:给出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. [SoapUI] 通过Groovy写文本文件

    如果文件已经存在,先删除,然后向文件中追加失败信息 if(maxRecordFail>0){ def testResultFile = new File(projectDir+"\\T ...

  2. .NET基础 (04)基础类型和语法

    基础类型和语法1 .NET中所有内建类型的基类是什么2 System.Object中包含哪些方法,哪些是虚方法3 值类型和引用类型的区别4 简述装箱和拆箱原理5 C#中是否有全局变量6 struct和 ...

  3. Asp.net MVC 自定义路由

    在做公司接口的时候  由于规范API 要用点分割. 如: HealthWay.controller.action 在MVC 4 下面做了个 路由配置如下: public override void R ...

  4. css flex cheat sheet

    .container{ display: -webkit-flex/inline-flex; display: -moz-flex/inline-flex; display: -ms-flex/inl ...

  5. oracle数据库中修改已存在数据的字段

    在oracle中,如果已经存在的数据的某些列,假如要更换类型的话,有的时候是比较麻烦的, 会出现:ORA-01439: column to be modified must be empty to c ...

  6. 织梦CMS让channelartlist标签支持currentstyle【转】

    打开include\taglib\channelartlist.lib.php找到 $pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]); ...

  7. LDAP 相关链接

    http://www.cnblogs.com/fish-li/archive/2012/05/07/2486840.html细说ASP.NET Windows身份认证 http://www.cnblo ...

  8. sp_helptext输出错行问题解决

    相信,大家对sp_helptext存储过程一定不陌生,它可以帮你快速获取存储过程等对象的定义.但它有一个致命的缺点就是:每行最多返回255个nvarchar类型的字符,假如有一个编写不规范的存储过程, ...

  9. Word页面去除下划线(Office 2017)实现

    后面就不用说了吧设置边框无

  10. 忘记Oracle用户名和密码

    方法一: 看看是不是Oracle服务器没有打开 打开cmd,输入sqlplus /nolog,回车---->进入sqlplus; 输入“conn /as sysdba”:以超级管理员的方式连接数 ...