小Z的袜子 hose 2009-国家集训队 bzoj-2038

题目大意:给定一个n个袜子的序列,每个袜子有一个颜色。m次询问:每次询问一段区间中每种颜色袜子个数的平方和。

注释:$1\le n,m\le 5\cdot 10^4$。


想法

莫队算法的第一道例题。

每次左指针和右指针动的时候注意平方即可,

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 80050
struct Node
{
int s,t,id;
int ans;
}a[N];
int now;
int n,q,block,pos[N],h[N],c[N];
inline bool cmp1(const Node &x,const Node &y)
{
if(pos[x.s]==pos[y.s]) return x.t<y.t;
return pos[x.s]<pos[y.s];
}
inline bool cmp2(const Node &x,const Node &y)
{
return x.id<y.id;
}
void update(int x,int sig)
{
if(sig==1)
{
now+=h[c[x]];
h[c[x]]++;
}
else
{
now-=h[c[x]]-1;
h[c[x]]--;
}
/*now-=h[c[x]];
h[c[x]]+=sig;
now+=h[c[x]];*/
}
void print(int x)
{
int b=a[x].ans,d=1ll*(a[x].t-a[x].s)*(a[x].t-a[x].s+1)/2;
if(b==0)
{
puts("0/1");return;
}
int gcd=__gcd(b,d);
printf("%d/%d\n",b/gcd,d/gcd);
}
int main()
{
scanf("%d%d",&n,&q);
int i,l,r=0,j;
for(i=1;i<=n;++i) scanf("%d",&c[i]);
if(!n)return 0;
int size=sqrt(n);
block=n/size;
for(i=1;i<=block;++i)
{
l=r+1;
r=i*size;
for(j=l;j<=r;++j)
{
pos[j]=i;
}
}
if(r!=n)
{
l=r+1;
r=n;
block++;
for(i=l;i<=r;++i)
{
pos[i]=block;
}
}
for(i=1;i<=q;++i)scanf("%d%d",&a[i].s,&a[i].t),a[i].id=i;
sort(a+1,a+q+1,cmp1);
for(l=1,r=0,i=1;i<=q;++i)
{
if(a[i].s==a[i].t)
{
a[i].ans=0;
continue;
}
while(l<a[i].s)update(l,-1),l++;
while(l>a[i].s)update(l-1,1),l--;
while(r<a[i].t)update(r+1,1),r++;
while(r>a[i].t)update(r,-1),r--;
a[i].ans=now;
}
sort(a+1,a+q+1,cmp2);
for(i=1;i<=q;i++)
{
print(i);
}
}

小结:莫队真可爱/ka

[bzoj2038][2009国家集训队]小Z的袜子(hose)_莫队的更多相关文章

  1. BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队

    BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无 ...

  2. BZOJ2038 2009国家集训队 小Z的袜子(hose) 【莫队】

    BZOJ2038 2009国家集训队 小Z的袜子(hose) Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼 ...

  3. BZOJ2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)

    神奇的莫队算法,用来解决可离线无修改的区间查询问题: 首先对原序列进行分块,√n块每块√n个: 然后对所有查询的区间[l,r]进行排序,首先按l所在的块序号升序排序,如果一样就按r升序排序: 最后就按 ...

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

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

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

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...

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

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  7. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 【莫队算法模版】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2038 题意概括: 有 N 只袜子(分别编号为1~N),有 M 次查询 (L, R)里面随机 ...

  8. BZOJ:2038: [2009国家集训队]小Z的袜子(hose)(莫队算法模板)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2038 解题心得: 第一次接触莫队算法,很神奇,很巧妙.莫队算法主要就是用来解决多次询问时 ...

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

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2038 [题意] 给定一个有颜色的序列,回答若干个询问:区间内任选两个颜色相同的概率. ...

随机推荐

  1. [BZOJ:3162]:独钓寒江雪

    题解: 求本质不同的独立集的个数 首先独立集的个数是很好做的 \(f[u][0/1]\)表示节点\(u\)不选/选的方案数 然后dp就是 \(f[u][0] = f[u][0] * (f[v][0] ...

  2. 如何向expect脚本里面传递参数

    如何向expect脚本里面传递参数   比如下面脚本用来做ssh无密码登陆,自动输入确认yes和密码信息,用户名,密码,hostname通过参数来传递   ssh.exp   Python代码   # ...

  3. JS简单路由实现

    说一下前端路由实现的简要原理,以 hash 形式(也可以使用 History API 来处理)为例, 当 url 的 hash 发生变化时,触发 hashchange 注册的回调,回调中去进行不同的操 ...

  4. 图片选择器ImageEditContainer

    1. 简介 本次demo中一共封装了两个组件:ImageEditButton 和 ImageEditContainer.其中ImageEditContainer 是在 ImageEditButton, ...

  5. Mybatis 在 insert 之后想获取自增的主键 id,但却总是返回1

    记录一次傻逼的问题, 自己把自己蠢哭:Mybatis 在 insert 之后想获取自增的主键 id,但却总是返回1 错误说明: 返回的1是影响的行数,并不是自增的主键id: 想要获取自增主键id,需要 ...

  6. MSSQLSERVER_3176

    本文档已存档,并且将不进行维护. MSSQLSERVER_3176                 SQL Server 2014                    SQL Server 2012 ...

  7. (转)Eclipse在线配置Hibernate Tools

    http://blog.csdn.net/yerenyuan_pku/article/details/52733403 查看Eclipse版本 Eclipse针对程序开发有很多发行版本,除了开发语言的 ...

  8. GEO/SRA数据库

    GEO数据库 GEO数据库隶属于NCBI,是最大最全面的基因表达数据库,主要是芯片和转录组测序数据.除储存数据外,也提供一些数据挖掘工具,因此利用好这个数据库,没有实验,没有自己的数据也能发好文章! ...

  9. 软件工程师需要了解的网络知识:从铜线到HTTP(一)—— 前言

    转自:https://lvwenhan.com/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/485.html?hmsr=toutiao.io&utm_medium ...

  10. JQuery 的toggle() 方法如何使用?

    JQuery中的toggle()方法,相当于点一个元素时,重复循环两个函数,而这两个函数可以作为toggle()函数的两个参数传进去,当第一次点击的时候会执行前面的参数,而第二次点击时执行的是后面的参 ...