题意:给出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. 实践作业4:Web测试实践(小组作业)每日任务记录3

    会议时间:2017年12月23日 会议地点:东九教学楼自习区 主  持  人:王晨懿 参会人员:王晨懿.余晨晨.郑锦波.杨潇.侯欢.汪元 记  录  人:王晨懿 会议议题:小组作业第二阶段 下面是今天 ...

  2. Android Touch 事件总结

    ---恢复内容开始--- 1.Touch事件传递机制 过程有点儿类似于栈, ViewGroup的子类有都继承它的以下3个方法: public boolean dispatchTouchEvent(Mo ...

  3. POC索引

    最近在看窗口函数,接触到了POC索引,所以借此机会好好研究一下索引. 一般支持窗口函数的索引指南都遵循POC的概念,也就是Partitioning(分区).Ordering(排序)和Covering( ...

  4. 删除 Ceph 的image报rbd: error: image still has watchers

    在Ceph集群日常运维中,管理员可能会遇到有的image删除不了的情况,有一种情况是由于image下有快照信息,只需要先将快照信息清除,然后再删除该image即可,还有一种情况是因为该image仍旧被 ...

  5. 前端福利之表单input按钮在各浏览器之间的兼容性(转)

    从网上看了这篇关于表单input按钮的浏览器兼容性问题,总结的还不错,所以copy下来学习下. input按钮在各个浏览器之间的兼容性问题,看下边这段代码: input.item { backgrou ...

  6. KindEditor3.x整合教程-Xproer.WordPaster

    版权所有 2009-2017 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webplug/wordpa ...

  7. 编写高质量代码改善C#程序的157个建议——建议129:泛型类型参数要以T作为前缀

    建议129:泛型类型参数要以T作为前缀 作为一种约定,泛型类型的参数要以T作为前缀.如委托声明: Action<T1,T2> 其中,泛型类型参数名不应该处理成: Action<Arg ...

  8. 什么是 Java 内存模型,最初它是怎样被破坏的?(转载)

    活跃了将近三年的 JSR 133,近期发布了关于如何修复 Java 内存模型(Java Memory Model, JMM)的公开建议.原始 JMM 中有几个严重缺陷,这导致了一些难度高得惊人的概念语 ...

  9. HAOI2014 走出金字塔

    题目链接:戳我 找规律. 不过为了方便,每次我们计算入口和某一个出口之间需要花费的体力值的时候,不妨把x较小的假设成塔顶,这样的话另一个就不需要分类讨论了. 详细请看代码 #include<io ...

  10. Mysql内置功能《二》触发器

    使用触发器可以定制用户对表进行[增.删.改]操作时前后的行为,注意:没有查询 一 创建触发器 # 插入前 CREATE TRIGGER tri_before_insert_tb1 BEFORE INS ...