[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 [题意] 给定一个有颜色的序列,回答若干个询问:区间内任选两个颜色相同的概率. ...
随机推荐
- Maven之项目搭建与第一个helloworld(多图)
这次记录第一个搭建一个maven的helloworld的过程. 转载 1.搭建web工程肯定得new 一个 maven工程,假如project中没有直接看到maven工程,那么选择Other,然后在W ...
- hdu6198 number number number(递推公式黑科技)
number number number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 二分+RMQ/双端队列/尺取法 HDOJ 5289 Assignment
题目传送门 /* 题意:问有几个区间最大值-最小值 < k 解法1:枚举左端点,二分右端点,用RMQ(或树状数组)求区间最值,O(nlog(n))复杂度 解法2:用单调队列维护最值,O(n)复杂 ...
- HTML基础2——综合案例1——如何用iis配置网站
1.打开iis 如果机子上面没有iis,可以先装一个,不同的系统可能安装步骤不一样,至于iis的安装方法,大家可以去百度找找. 2.准备网站源程序 既然要配置网站,肯定要先准备好网站源程序,网 ...
- 发生在升级OS X Yosemite后:修复各种开发环境
本博文最初发布于我的个人博客<Jerry的乐园> 终于还是忍不住升级了,促使我升级的原动力居然是Alfred的Yosemite theme居然比初始theme好看很多!在升级前就预想到我的 ...
- 关于java中replace的用法
今天突然看到Java中的replace有两种方法,一种是直接替换,另一种是可以进行匹配替换的方式: public String replace(CharSequence target, CharSeq ...
- 创建对象——单例(Singleton)模式
单例(Singleton)模式: 保证一个类在系统里只能有一个对象被实例化. 如:缓存池.数据库连接池.线程池.一些应用服务实例等. 难点:在多线程环境中,保证实例的唯一性. ...
- C#基础知识面试经典[整理]
个人网站:http://www.51pansou.com .net视频下载:.net视频教程 .net源码下载:.net源码 当初学 C# 时是找个人大概问了一下数据类型和分支语句就开始做项目了.这两 ...
- CAD控件:控件图形数据库概要说明
1.1 控件数据库 3 1.1.1 数据库概述 3 1.2 数据库初始化 4 1.3 创建和组织数据库 4 1.4 保存数据库 4 1.5 插入一个数据库 4 1.6 设置当前数据库值 5 1.6.1 ...
- HDU多校Round 7
Solved:2 rank:293 J. Sequense 不知道自己写的什么东西 以后整数分块直接用 n / (n / i)表示一个块内相同n / i的最大i #include <bits/s ...