题意 有m种卡 给出卡的使用序列 要求每次从卡堆的顶部抽一张出来 刚好符合序列 输出初始 卡堆的排序 再输出每次抽出卡用后 卡插回卡堆的时候 这张卡上面有几张卡

初始排序很容易就可以搞出来 但是需要注意的是 如果我有三种卡 而我只用了第一种 在输出卡堆里 仍然要输出没有用到的2和3

可以想到 既然每张卡都只有一种 那么 由这种规则来看 如果一张卡被抽出之后 接下来还要用 它插回去的位置上面 必须有在这个过程之中 要用的别的卡 很容易的就想到 插回去 上面有几张卡 取决于这次用这张卡和下次用这张卡之间有几种卡 有一种 插回去的位置上面就有几个 如果用了这张卡之后不会再用到了 那就无脑的插到卡堆的最下 即m-1

关于一张卡的两个相邻使用位置 用莫队来搞就好 n是1e5 抽象出来的询问也不到1e5 复杂度还是过的去的 需要注意的是 询问id是该询问的L

其实如果想到了插回取决于什么..就是一道莫队水题了..然而被初始卡堆的输出trick到了..orz 我的绝杀...

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
#include<math.h>
using namespace std;
struct node
{
int l,r,id;
};
int q[100050];
int a[100050];
int pl[100050];
int ans[100050];
node xw[100050];
int pos[100050];
vector<int >v[100050];
int cmp(node a,node b)
{
if(pos[a.l]==pos[b.l])
return a.r<b.r;
return a.l<b.l;
}
int an;
void add(int x)
{
int z = a[x];
if(q[z]==0)
an++;
q[z]++;
}
void del(int x)
{
int z= a[x];
if(q[z]==1)
an--;
q[z]--;
}
int main()
{
int n,m;
while(~scanf("%d%d",&m,&n))
{
for(int i=1; i<=m; i++)q[i]=0;
for(int i=1; i<=m; i++)
v[i].clear();
int sz=sqrt(n);
for(int i =1; i<=n; i++)
scanf("%d",&a[i]);
int cnt = 0;
for(int i =1; i<=n; i++)
{
pos[i]=i/sz;
v[a[i]].push_back(i);
if(q[a[i]]==0)
{
pl[++cnt]=a[i];
q[a[i]]++;
}
}
for(int i = 1; i<= m ;i++)
{
if(q[i]==0)
{
pl[++cnt]=i;
q[i]++;
}
}
int res=0;
for(int i=1; i<=m; i++)
{
int siz=v[i].size();
for(int j=0; j<siz; j++)
{
if(j+1==siz)
{
xw[++res].l=-1;
xw[res].r=-1;
}
else
{
xw[++res].l=v[i][j];
xw[res].r=v[i][j+1];
}
xw[res].id=v[i][j];
}
}
sort(xw+1,xw+1+n,cmp);
int l = 1;
int r = 0;
an = 0;
for(int i=1; i<=m; i++)q[i]=0;
for(int i = 1; i<=n; i++)
{
if(xw[i].l==-1)
{
ans[xw[i].id]=m-1;
continue;
}
while(l<xw[i].l)
{
del(l);
l++;
}
while(l>xw[i].l)
{
l--;
add(l);
}
while(r>xw[i].r)
{
del(r);
r--;
}
while(r<xw[i].r)
{
r++;
add(r);
}
ans[xw[i].id]=an-1;
}
for(int i = 1; i<=cnt; i++)
{
printf("%d",pl[i]);
if(i==cnt)
printf("\n");
else printf(" ");
}
for(int i = 1; i<=n; i++)
{
printf("%d\n",ans[i]);
}
}
}

  

URAL 2080 莫队的更多相关文章

  1. BZOJ 3289: Mato的文件管理[莫队算法 树状数组]

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2399  Solved: 988[Submit][Status][Di ...

  2. NBUT 1457 莫队算法 离散化

    Sona Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: Submit Status Practice NBUT 145 ...

  3. 【填坑向】bzoj2038小Z的袜子 莫队

    学莫队必做题,,,但是懒得写.今天来填个坑 莫队水题 莫队实际上就是按一个玄学顺序来离线计算询问,保证复杂度只会多一个n1/2,感觉是玄学(离线算法都很玄学) 易错点:要开long long(卡我半天 ...

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

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

  5. NPY and girls-HDU5145莫队算法

    Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...

  6. Codeforces617 E . XOR and Favorite Number(莫队算法)

    XOR and Favorite Number time limit per test: 4 seconds memory limit per test: 256 megabytes input: s ...

  7. Bzoj 2038---[2009国家集训队]小Z的袜子(hose) 莫队算法

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色 ...

  8. 【BZOJ 3735】苹果树 树上莫队(树分块+离线莫队+鬼畜的压行)

    2016-05-09 UPD:学习了新的DFS序列分块,然后发现这个东西是战术核导弹?反正比下面的树分块不知道要快到哪里去了 #include<cmath> #include<cst ...

  9. 【BZOJ 2038】【2009 国家集训队】小Z的袜子(hose) 分块+莫队

    $SDOI2016Day-1$临时抱佛脚学习一下莫队算法$233$ 我预感到自己省选要爆0hhh #include<cmath> #include<cstdio> #inclu ...

随机推荐

  1. BeanShell用法汇总(部分摘抄至网络)【转】

    说明:本文部分资料摘抄至 来源: http://www.cnblogs.com/puresoul/p/4915350.html 来源: http://www.cnblogs.com/puresoul/ ...

  2. 6754 Keyboard of a Mobile Telephone

    /*实践再次说明ch=getchar()的速度非常慢*/ /*大水题,不解释*/ #include<stdio.h> #include<string.h> int main() ...

  3. FastMM 定位内存泄露的代码位置

    FastMM 定位内存泄露的代码位置 开源的FastMM,使用很简单,在工程的第一行引用FastMM4即可(注意,一定要在第一个Uses的位置),可以在调试程序时提示内存泄露情况,还可以生成报告. 在 ...

  4. AngularJS 包含HTML文件

    类似于python tornado的include方法,同样是可以在一个html文件中加载另外一个html文件,这样可以不用重复的写一些几乎不改变的代码. 首先创建两个文件,然后代码如下: <! ...

  5. WebApi 2:属性路由 [Route()],attribute routing

    原文:http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 属性 ...

  6. ie不支持getElementsByClassName的解决办法

    目前可以这么解决,判断浏览器支不支持这个方法,如果支持就不管:如果不支持,就在document对象里加入getElementsByClassName这个方法,按兴趣的朋友可以了解下 if (navig ...

  7. EF框架step by step(2)—Model-First

    这一篇主要说一下EF框架中,Model First做法,仍然采用上一篇的案例.但增加评论功能.首先打开Blog.edmx文件,在空白处右键,添加新实体Comment,如下图示: 点击确定,关闭窗口. ...

  8. Ferry Loading III[HDU1146]

    Ferry Loading IIITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...

  9. Hadoop核心组件

    1.Hadoop生态系统 2.HDFS(Hadoop分布式文件系统) 源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版. 是Hadoop体系中数据存储管理的基础.它是一个 ...

  10. ACM 喷水装置(二)

    喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的 ...