[bzoj2038][2009国家集训队]小Z的袜子(hose)_莫队
小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)_莫队的更多相关文章
- BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队
BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无 ...
- BZOJ2038 2009国家集训队 小Z的袜子(hose) 【莫队】
BZOJ2038 2009国家集训队 小Z的袜子(hose) Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼 ...
- BZOJ2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)
神奇的莫队算法,用来解决可离线无修改的区间查询问题: 首先对原序列进行分块,√n块每块√n个: 然后对所有查询的区间[l,r]进行排序,首先按l所在的块序号升序排序,如果一样就按r升序排序: 最后就按 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
- 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 【莫队算法】
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 【莫队算法模版】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2038 题意概括: 有 N 只袜子(分别编号为1~N),有 M 次查询 (L, R)里面随机 ...
- BZOJ:2038: [2009国家集训队]小Z的袜子(hose)(莫队算法模板)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2038 解题心得: 第一次接触莫队算法,很神奇,很巧妙.莫队算法主要就是用来解决多次询问时 ...
- bzoj 2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2038 [题意] 给定一个有颜色的序列,回答若干个询问:区间内任选两个颜色相同的概率. ...
随机推荐
- Java多线程(六)守护进程
守护进程:当进程中不存在非守护线程了,则守护线程自动销毁: public class DaemonThread extends Thread{ private int i =0; public voi ...
- 转 DOS(CMD)下批处理换行问题/命令行参数换行 arg ms-dos
DOS(CMD)下批处理换行问题本人经常写一些DOS批处理文件,由于批处理中命令的参考较多且长,写在一行太不容易分辨,所以总想找个办法把一条命令分行来写,今天终于试成功两种方法.一.在CMD下,可以用 ...
- Asp.net:MVC认识
用MVC框架好长一段时间,发现每天都是写业务代码,不想每天只为了工作而写代码,想把工作中认识的MVC框架,遇到的问题,有时候天天在用,但是不知道里面是什么东西,什么原理,为啥這样写等一系列问题.进行梳 ...
- 微信JSSDK支付
var appId,timeStamp,nonceStr,package,signType,paySign; function goumai(){ $.confirm({ title: '确认购买', ...
- 实例化WebService实例对象时出现localhost未引用命名空间
//实例化WebService实例对象 localhost.WebService WebserviceInstance = new localhost.WebService(); 在实例化WebSer ...
- putty中文乱码问题解决
###putty中文乱码问题解决 用putty从windows xp连接ubuntu server或者FreeBSD系统,其中中文部分乱码,经常遇到这个问题的时候,会觉得很郁闷.现共享一些解决这个问题 ...
- 【工具】Github
项目目录结构设计与git远程仓库的建立 git码云仓库建立:在码云网站上新建组织和项目. 配置sshkey认证和公钥:命令行ssh-keygen -t rsa -C "xxxxx@xxxxx ...
- WordPress强制跳转https教程
在互联网火热的今天,安全问题显得越来越重要,为了用户信息安全,很多热门网站都启用了https 有小伙伴就问:我启用了https,为什么访问的时候显示的还是http呢? 其实,有时候并不是因为我们ssl ...
- 什么 是JUnit?
JUnit详解: http://www.cnblogs.com/eggbucket/archive/2012/02/02/2335697.html
- How a stack frame works 栈帧的要素与构建步骤
http://en.citizendium.org/wiki/Stack_frame To use a stack frame, a thread keeps two pointers, often ...