题意 有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. Swift3.0语言教程删除字符与处理字符编码

    Swift3.0语言教程删除字符与处理字符编码 Swift3.0语言教程删除字符 Swift3.0语言教程删除字符与处理字符编码,在字符串中,如果开发者有不需要使用的字符,就可以将这些字符删除.在NS ...

  2. 怎么提高Jquery性能

    很久没有关注jQuery了,最近重新看了一下,看到一些不错的文章,转来坐一下笔记. 其内容和一些新提供的方法还是很多有值得学习的地方. 1. 使用最新版本的jQuery jQuery的版本更新很快,你 ...

  3. Spring进阶—如何用Java代码实现邮件发送(二)

    http://www.cnblogs.com/itsource/p/4266905.html

  4. 每天一个linux命令---mount

    查询挂载服务的信息,使用挂载mount命令: [wapmail@app2linux04 monitor]$ mount |grep 172.16.182.146 type nfs (ro,udp,no ...

  5. Fetch from Upstream 变灰失效

    Team——>Remote——>Configure Fetch from Upstream… Team——>Remote——>Configure Push to  Upstre ...

  6. Leetcode Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  7. TYVJ P3522 &&洛谷 P1135 奇怪的电梯 Label:bfs

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...

  8. [杂谈] My Wikipedia

    // 此博文为迁移而来,写于2015年6月8日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w3de.html

  9. 【BZOJ3439】Kpm的MC密码 trie树+主席树

    Description 背景 想Kpm当年为了防止别人随便进入他的MC,给他的PC设了各种奇怪的密码和验证问题(不要问我他是怎么设的...),于是乎,他现在理所当然地忘记了密码,只能来解答那些神奇的身 ...

  10. InterBase数据库迁移到MySQL(说明)

    刚刚到公司1周便接到了第一个需求,进过了几天的沟通明白了是从gbk文件中恢复InterBase数据库,然后再将恢复到数据库中的数据导出到远程的MySQL数据库中,拿到需求先分步去看问题了,问题大致可分 ...