luogu1494 [国家集训队]小Z的袜子
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int n, m, a[50005], blc, bel[50005], cnt[50005];
long long ansfz[50005], ansfm[50005], ans;
struct Node{
int l, r, id;
}nd[50005];
bool cmp(Node x, Node y){
if(bel[x.l]!=bel[y.l]) return bel[x.l]<bel[y.l];
if(bel[x.l]&1) return x.r<y.r;
else return x.r>y.r;
}
void add(int x){
cnt[a[x]]++;
if(cnt[a[x]]>1) ans += cnt[a[x]]*(cnt[a[x]]-1) - (cnt[a[x]]-2)*(cnt[a[x]]-1);
}
void del(int x){
cnt[a[x]]--;
if(cnt[a[x]]>0) ans += cnt[a[x]]*(cnt[a[x]]-1) - (cnt[a[x]]+1)*cnt[a[x]];
}
//注意:以上add和del中的限制条件要么同时加要么同时不加。
//因为cnt可能是负值。比如说在[4,4]到[7,7]的过程中
long long gcd(long long a, long long b){
return b==0?a:gcd(b,a%b);
}
int main(){
cin>>n>>m;
blc = sqrt(n);
for(int i=1; i<=n; i++){
scanf("%d", &a[i]);
bel[i] = (i - 1) / blc + 1;
}
for(int i=1; i<=m; i++){
scanf("%d %d", &nd[i].l, &nd[i].r);
nd[i].id = i;
}
sort(nd+1, nd+1+m, cmp);
int ll=nd[1].l, rr=nd[1].r;
for(int i=ll; i<=rr; i++) add(i);
if(!ans) ansfz[nd[1].id] = 0, ansfm[nd[1].id] = 1;
else{
long long qwq=gcd(ans, (long long)(rr-ll+1)*(rr-ll));
ansfz[nd[1].id] = ans / qwq;
ansfm[nd[1].id] = (long long)(rr - ll + 1) * (rr - ll) / qwq;
}
for(int i=2; i<=m; i++){
while(ll<nd[i].l) del(ll++);
while(ll>nd[i].l) add(--ll);
while(rr<nd[i].r) add(++rr);
while(rr>nd[i].r) del(rr--);
if(!ans) ansfz[nd[i].id] = 0, ansfm[nd[i].id] = 1;
else{
long long qwq=gcd(ans, (long long)(rr-ll+1)*(rr-ll));
ansfz[nd[i].id] = ans / qwq;
ansfm[nd[i].id] = (long long)(rr - ll + 1) * (rr - ll) / qwq;
}
}
for(int i=1; i<=m; i++)
printf("%lld/%lld\n", ansfz[i], ansfm[i]);
return 0;
}
luogu1494 [国家集训队]小Z的袜子的更多相关文章
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7676 Solved: 3509[Subm ...
- 莫队算法 2038: [2009国家集训队]小Z的袜子(hose)
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 ...
- BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...
- Bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队,分块,暴力
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 5763 Solved: 2660[Subm ...
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 3577 Solved: 1652[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )
莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块
分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2938 Solved: 13 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
随机推荐
- python之商品操作小程序
要求:写一个添加商品的程序,商品信息写入txt文件中,以二维字典形式比如:{‘小米’:{‘价格’:‘1999元’,‘数量’:10}} 1.添加商品 #商品名称 #价格 #数量 2.查看商品 3.删除商 ...
- Eclipse安装jad反编译插件(在线安装)
Help→Eclipse Marketplace→Find→jad 然后等安装完成重启eclipse即可
- hadoop-0.20.2伪分布式安装简记
1.准备环境 虚拟机(redhat enterprise linux 6.5) jdk-8u92-linux-x64.tar.gz hadoop-0.20.2.tar.gz 2.关闭虚拟机的防火墙,s ...
- qconbeijing2015
http://2015.qconbeijing.com/schedule 大会日程 2015年4月23日,星期四 地点 2号厅 203AB 201AB 9:15 开场致辞 专题 主题演讲 互联网金融背 ...
- Dapper系列之二:Dapper的事务查询
Dapepr讲解 上篇文章我们介绍了,什么是Dapepr,有什么好处,性能的对比,还有多表多数据添加操作(事务的封装)等等.本篇文章我们继续讲解.....如果本篇文章看不懂,请看我上一篇文章:Dape ...
- 多线程wait和notify实现1212
package threadT; public class ThreadMain { public static void main(String args[]) { final Object obj ...
- 【转】Android进程机制
以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luosheng ...
- (转)新手学习System Verilog & UVM指南
从刚接触System Verilog以及后来的VMM,OVM,UVM已经有很多年了,随着电子工业的逐步发展,国内对验证人才的需求也会急剧增加,这从各大招聘网站贴出的职位上也可以看出来,不少朋友可能想尽 ...
- 初试springWebMVC
最近在尝试配置SpringMVC,发现各种坑. 首先遇到了这个问题. 'component-scan' and its parser class [org.springframework.contex ...
- Java集合类工具CollectionUtils的操作方法
集合判断: 例1: 判断集合是否为空:CollectionUtils.isEmpty(null): trueCollectionUtils.isEmpty(new ArrayList()): true ...