BZOJ2038【莫队算法】
THE FIRST 莫队算法。
/**************************************************************
Problem: 2038
User: keyboarder_zsq
Language: C++
Result: Accepted
Time:1644 ms
Memory:2988 kb
****************************************************************/ //#include <bits/stdc++.h>
#include<cstdio>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII; const int N=5e4+10;
struct asd{
LL a,b;
int left,right;
int id;
};
int n,m,col[N],pos[N];
asd q[N];
bool cmp(asd x,asd y)
{
if(pos[x.left]==pos[y.left]) return x.right<y.right;
return x.left<y.left;
}
bool cmp_id(asd x,asd y)
{
return x.id<y.id;
} LL ans,num[N];
void update(int p,int add)
{
ans-=num[col[p]]*num[col[p]];
num[col[p]]+=add;
ans+=num[col[p]]*num[col[p]];
} void solve()
{
memset(num,0,sizeof(num));
ans=0;
for(int i=0,L=1,R=0;i<m;i++)
{
while(R<q[i].right)
{
update(R+1,1);
R++;
}
while(R>q[i].right)
{
update(R,-1);
R--;
}
while(L<q[i].left)
{
update(L,-1);
L++;
}
while(L>q[i].left)
{
update(L-1,1);
L--;
}
if(q[i].left==q[i].right)
{
q[i].a=0;q[i].b=1;
continue;
}
q[i].a=ans-(q[i].right-q[i].left+1);
q[i].b=(LL)(q[i].right-q[i].left+1)*(q[i].right-q[i].left);
LL gcd=__gcd(q[i].a,q[i].b);
q[i].a/=gcd;
q[i].b/=gcd;
}
} int main()
{
scanf("%d%d",&n,&m);
int block=(int)sqrt(n);
for(int i=1;i<=n;i++)
{
scanf("%d",&col[i]);
pos[i]=(i-1)/block+1;
}
for(int i=0;i<m;i++)
{
scanf("%d%d",&q[i].left,&q[i].right);
q[i].id=i;
}
sort(q,q+m,cmp);
solve();
sort(q,q+m,cmp_id);
for(int i=0;i<m;i++)
printf("%lld/%lld\n",q[i].a,q[i].b);
return 0;
}
/*
6 4
1 2 3 3 3 2
2 6
1 3
3 5
1 6
*/
BZOJ2038【莫队算法】的更多相关文章
- [bzoj2038]莫队算法学习
解题关键:莫队最重要的是区间之间以$O(1)$的复杂度进行转化,由于电脑原因,后续补上公式推导. #include<cstdio> #include<cstring> #inc ...
- BZOJ2038 小Z的袜子 (莫队算法)
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...
- [BZOJ2038]小Z的袜子(莫队算法)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 分析:莫队算法 莫队算法是一种思想…… 处理问题:不带修改的区间询问 使用要求:[l-1 ...
- BZOJ-2038 小Z的袜子(hose) 莫队算法
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 5573 Solved: 2568 [Subm ...
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) 莫队算法
要使用莫队算法前提 ,已知[l,r]的答案,要能在logn或者O(1)的时间得到[l+1,r],[l-1,r],[l,r-1],[l,r+1],适用于一类不修改的查询 优美的替代品——分块将n个数分成 ...
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 3577 Solved: 1652[Subm ...
- 莫队算法学习笔记【BZOJ2038:小Z的袜子】【SPOJ3267:D-query】
很久以前傻乎乎地看来源奇怪的资料的时候被各种曼哈顿弄晕了. 然后现在学会的是分块方法.另新创一个分块方法. 让我们考虑这样一个区间询问问题…… 它有如下的性质: 0,n个数,Q个询问. 1,它没有修改 ...
- 莫队算法&BZOJ2038
题目传送门 今天看了分块,顺便把基本的莫队学习了一下. 莫队算法是一种离线算法,复杂度可以达到O((M+N)*Sqrt(N)); 对于询问区间的左端点分块,块内的右端点从小到大排列. 对区间进行偏移操 ...
- [bzoj2038][2009国家集训队]小Z的袜子(hose)——莫队算法
Brief Description 给定一个序列,您需要处理m个询问,每个询问形如[l,r],您需要回答在区间[l,r]中任意选取两个数相同的概率. Algorithm Design 莫队算法入门题目 ...
- 【bzoj2038】[2009国家集训队]小Z的袜子(hose) 莫队算法
原文地址:http://www.cnblogs.com/GXZlegend/p/6803860.html 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终 ...
随机推荐
- Spring与JDK版本不一致引发问题Caused by: java.lang.IllegalArgumentException
tomcat启动一个spring的项目,tomcat使用8.5,JDK使用1.8,Spring使用3.0,启动之后报错 Caused by: java.lang.IllegalArgumentExce ...
- public,protected,private,static,final的区别(转载)
1.类 (1)在java中有public.protected.private三种显示的修饰符用于控制可见性,package不是显示的修饰符,它是隐含的,即如果在类.变量等前没加显示的可见性修饰符,那它 ...
- Sping中的配置Bean详解
一.spring实例化对象的方法 在Spring中,所有管理的对象都是JavaBean对象,而BeanFactory和ApplicationContext就是spring框架的两个IOC容器,现在一般 ...
- Two-Factor Authentication 2FA
About two-factor authentication - User Documentation https://help.github.com/articles/about-two-fact ...
- mybatis入门(五)
根据用户名称模糊查询用户信息 @Test public void findUserByNameTest() throws IOException { // 通过工厂得到SqlSession SqlSe ...
- Sleeping Beauty,摘自iOS应用Snow White and more stories
Once upon a time, there lived a king and queen. 从前,有个国王和王后. They had a beautiful daughter. 他们有一个漂亮的女 ...
- 1.JavaScript:写入 HTML 输出
①JavaScript 是可插入HTML页面的编程代码 ②JavaScript插入HTML页面后,可有所有的现代浏览器执行 ※提示:您只能在 HTML 输出中使用 document.write.如果您 ...
- Strans 内表-xml文件
一.内表到xml文件 <?sap.transform simple?> <tt:transform xmlns:tt="http://www.sap.com/transfo ...
- 代码空间项目 -- InstantiationException的异常
java.lang.InstantiationException实例化异常.当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常. 这次项目中查询type时 ...
- Redis C语言操作封装
#ifndef BOYAA_FOURLANDLORD_REDISCLASS_H_20130217 #define BOYAA_FOURLANDLORD_REDISCLASS_H_20130217 #i ...