解题关键:莫队最重要的是区间之间以$O(1)$的复杂度进行转化,由于电脑原因,后续补上公式推导。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
ll n,m,ans;
struct node{
ll l,r,id;
}b[];
struct nd{
ll a,b;
}as[];
ll a[],pos[],s[]; bool cmp1(const node &a,const node &b){
return ((pos[a.l]==pos[b.l])&&(a.r<b.r))||(pos[a.l]<pos[b.l]);
} void init(){
ll block=sqrt(n);
for(int i=;i<=n;i++) pos[i]=(i-)/block+;
} void update(ll p,ll add){
/*ans-=s[a[p]]*s[a[p]];
s[a[p]]+=add;
ans+=s[a[p]]*s[a[p]];*/
ans+=*add*s[a[p]]+(add==?:);
s[a[p]]+=add;
} void solve(){
for(int i=,l=,r=;i<=m;i++){
for(;r<b[i].r;r++) update(r+,);
for(;r>b[i].r;r--) update(r, -);
for(;l<b[i].l;l++) update(l, -);//这里注意搞清楚
for(;l>b[i].l;l--) update(l-,);
if(b[i].l==b[i].r){
as[b[i].id].a=,as[b[i].id].b=;//题目要求
continue;
}
ll c=ans;
ll d=(b[i].r-b[i].l+)*(b[i].r-b[i].l);
ll k=__gcd(c,d);
c/=k,d/=k;
as[b[i].id].a=c,as[b[i].id].b=d;
}
}
int main(){
cin>>n>>m;
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=m;i++){
cin>>b[i].l>>b[i].r;
b[i].id=i;
}
init();
sort(b+,b+m+,cmp1);
solve();
for(int i=;i<=m;i++){
cout<<as[i].a<<"/"<<as[i].b<<"\n";
}
}

[bzoj2038]莫队算法学习的更多相关文章

  1. 莫队算法学习笔记【BZOJ2038:小Z的袜子】【SPOJ3267:D-query】

    很久以前傻乎乎地看来源奇怪的资料的时候被各种曼哈顿弄晕了. 然后现在学会的是分块方法.另新创一个分块方法. 让我们考虑这样一个区间询问问题…… 它有如下的性质: 0,n个数,Q个询问. 1,它没有修改 ...

  2. 洛谷 P1972 [SDOI2009]HH的项链【莫队算法学习】

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  3. HDU 5381 The sum of gcd (技巧,莫队算法)

    题意:有一个含n个元素的序列,接下来有q个询问区间,对每个询问区间输出其 f(L,R) 值. 思路: 天真单纯地以为是道超级水题,不管多少个询问,计算量顶多就是O(n2) ,就是暴力穷举每个区间,再直 ...

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

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

  5. 莫队算法&BZOJ2038

    题目传送门 今天看了分块,顺便把基本的莫队学习了一下. 莫队算法是一种离线算法,复杂度可以达到O((M+N)*Sqrt(N)); 对于询问区间的左端点分块,块内的右端点从小到大排列. 对区间进行偏移操 ...

  6. BZOJ2038 小Z的袜子 (莫队算法)

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

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

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

  8. [BZOJ2038]小Z的袜子(莫队算法)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 分析:莫队算法 莫队算法是一种思想…… 处理问题:不带修改的区间询问 使用要求:[l-1 ...

  9. BZOJ-2038 小Z的袜子(hose) 莫队算法

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 5573 Solved: 2568 [Subm ...

随机推荐

  1. yii 资料

    https://github.com/forecho/awesome-yii2 会随时更新 链接:http://pan.baidu.com/s/1mgCKtUK 密码:t6t1 与<YII框架& ...

  2. 【LeetCode】 数相加组合 Combination Sum

    描述 Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), ...

  3. CKeditor插件开发流程(二)SyntaxHighlighter

    CKEditor整合SyntaxHighlighter实现代码高亮显示 1,版本说明 CKEditor:ckeditor_4.0.1_standard.zipSyntaxHighlighter:syn ...

  4. tornado源码分析

    初识tornado 首先从经典的helloword案例入手 import tornado.ioloop import tornado.web class MainHandler(tornado.web ...

  5. MySQL 高可用架构在业务层面的应用分析

    MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=208312443&idx=1&a ...

  6. 算法(Algorithms)第4版 练习 1.4.1

    =N(N-1)(N-2)/6

  7. Shiro-Permissions 对权限的深入理解

    单个权限 query单个资源多个权限 user:query user:add 多值 user:query,add单个资源所有权限 user:query,add,update,delete user:* ...

  8. LightOJ 1138 二分

    1138 - Trailing Zeroes (III)   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: ...

  9. Jquery实现动态导航栏和轮播导航栏

    动态导航栏和轮播导航栏的实现思想: 利用jquery技术的append()方法和bind()方法实现li标签的添加和点击事件绑定,在利用$getJSON(url,data,function)请求方法实 ...

  10. 智课雅思词汇---十四、ante,anti不仅是词根还是前缀

    智课雅思词汇---十四.ante,anti不仅是词根还是前缀 一.总结 一句话总结:来源于拉丁语 ante 前.词根ant 为 anti 的变体.ante,anti不仅是词根还是前缀. 词根:ante ...