莫队:一种非常优雅的暴力,时间复杂度一般情况下是n*根号n,还是很优秀的。

今天水了三道莫队题,对普通莫队有了些了解

1.莫队l和r为指针,维护当前区间的某些信息,一般可以是当前区间不同权值的个数,(或许可以再加些限制)

2.莫队指针移动时的操作一定是O(1)最多O(log(n)),

3.当减值时先减当前的再加,加则反。

T1

水题,维护当前区间sum[i]*sum[i]的和,在进行操作即可

 1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<string>
5 #include<algorithm>
6 #include<cmath>
7 #include<stack>
8 #include<map>
9 #include<queue>
10 #define ps push_back
11 #define MAXN 55101
12 #define ll long long
13 using namespace std;
14 ll kuan;
15 struct node{ll l,r,id,zi,mu;}e[MAXN];
16 ll se[MAXN],sum[MAXN];
17 bool cmp(node a,node b)
18 {
19 return ((a.l/kuan)!=(b.l/kuan))?(a.l<b.l):(a.r<b.r);
20 }
21 bool CMP(node a,node b)
22 {
23 return a.id<b.id;
24 }
25 ll n,m;ll ans=0;
26 void jian(ll x)
27 {
28 ans-=sum[se[x]]*sum[se[x]];sum[se[x]]--;ans+=sum[se[x]]*sum[se[x]];
29 }
30 void add(ll x)
31 {
32 ans-=sum[se[x]]*sum[se[x]];sum[se[x]]++;ans+=sum[se[x]]*sum[se[x]];
33 }
34 ll gcd(ll a,ll b)
35 {
36 return (b==0)?a:gcd(b,a%b);
37 }
38 int main()
39 {
40 scanf("%lld%lld",&n,&m);kuan=sqrt(n);
41 for(ll i=1;i<=n;++i)
42 {
43 ll x;
44 scanf("%lld",&se[i]);
45 }
46 for(ll i=1;i<=m;++i)
47 {
48 ll l,r;
49 scanf("%lld%lld",&e[i].l,&e[i].r);
50 e[i].id=i;
51 }
52 sort(e+1,e+m+1,cmp);
53 ll l=1,r=0;
54 for(ll i=1;i<=m;++i)
55 {
56 //printf("l=%lld e[i].l=%lld r=%lld e[i].r=%lld\n",l,e[i].l,r,e[i].r);
57 while(l<e[i].l){jian(l++);}
58 while(l>e[i].l){add(--l);}
59 while(r<e[i].r){add(++r);}
60 while(r>e[i].r){jian(r--);}
61 e[i].zi=ans-(e[i].r-e[i].l+1);
62 e[i].mu=(e[i].r-e[i].l+1)*(e[i].r-e[i].l);
63 if(e[i].zi==0){e[i].mu=1;continue;}
64 ll gcdd=gcd(e[i].zi,e[i].mu);
65 e[i].zi/=gcdd;e[i].mu/=gcdd;
66 //printf("%lld %lld\n",e[i].zi,e[i].mu);
67 }
68 sort(e+1,e+m+1,CMP);
69 for(ll i=1;i<=m;++i)
70 {
71 printf("%lld/%lld\n",e[i].zi,e[i].mu);
72 }
73
74 }

T2

树状数组一个维护当前区间中<=某个数的个数

一个维护<=某个数出现的不同权值的个数

  1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<string>
5 #include<algorithm>
6 #include<cmath>
7 #include<stack>
8 #include<map>
9 #include<queue>
10 #define ps push_back
11 #define MAXN 205101
12 #define ll long long
13 using namespace std;
14 struct node{int l,r,id,A,B,ans1,ans2;}e[10*MAXN];
15 int kuan;int se[MAXN],c[MAXN];
16 bool cmp(node a,node b){return (a.l/kuan!=b.l/kuan)?(a.l<b.l):(a.r<b.r);}
17 bool CMP(node a,node b){return a.id<b.id;}
18 int lowbit(int x){return x&(-x);}int n,m;
19 void shu_add(int x,int k)
20 {
21 for(int i=x;i<=n;i+=lowbit(i))
22 {
23 c[i]+=k;
24 }
25 }
26 int get_sum(int x)
27 {
28 int ans=0;
29 for(int i=x;i>=1;i-=lowbit(i))
30 {
31 ans+=c[i];
32 }
33 return ans;
34 }
35 int d[MAXN];int sum[MAXN];
36 void shu_cishu(int x,int k)
37 {
38 for(int i=x;i<=n;i+=lowbit(i))
39 {
40 d[i]+=k;
41 }
42 }
43 int get_sum_cishu(int x)
44 {
45 int ans=0;
46 for(int i=x;i>=1;i-=lowbit(i))
47 {
48 ans+=d[i];
49 }
50 return ans;
51 }
52 void add(int x)
53 {
54 if(sum[se[x]]==0)
55 {
56 shu_cishu(se[x],1);
57 }
58 sum[se[x]]++;
59 shu_add(se[x],1);
60 }
61 void jian(int x)
62 {
63 sum[se[x]]--;
64 if(sum[se[x]]==0)
65 {
66 shu_cishu(se[x],-1);
67 }
68 shu_add(se[x],-1);
69 }
70 int main()
71 {
72 scanf("%d%d",&n,&m);
73 kuan=sqrt(n);
74 for(int i=1;i<=n;++i)
75 {
76 scanf("%d",&se[i]);
77 }
78 for(int i=1;i<=m;++i)
79 {
80 scanf("%d%d%d%d",&e[i].l,&e[i].r,&e[i].A,&e[i].B);
81 if(e[i].r>n)e[i].r=n;
82 if(e[i].A>n)e[i].A=n;
83 if(e[i].B>n)e[i].B=n;
84 e[i].id=i;
85 }
86 sort(e+1,e+m+1,cmp);
87 int l=1,r=0;
88 for(int i=1;i<=m;++i)
89 {
90 while(l<e[i].l){jian(l++);}
91 while(l>e[i].l){add(--l);}
92 while(r<e[i].r){add(++r);}
93 while(r>e[i].r){jian(r--);}
94 int A=e[i].A,B=e[i].B;
95 e[i].ans1=get_sum(B)-((A-1!=0)?get_sum(A-1):0);
96 e[i].ans2=get_sum_cishu(B)-((A-1!=0)?get_sum_cishu(A-1):0);
97 }
98 sort(e+1,e+m+1,CMP);
99 for(int i=1;i<=m;++i)
100 {
101 printf("%d %d\n",e[i].ans1,e[i].ans2);
102 }
103 }

小Z的袜子(hose) &&作业 (莫队)的更多相关文章

  1. BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队

    BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无 ...

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

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

  3. 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)

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

  4. BZOJ2038 2009国家集训队 小Z的袜子(hose) 【莫队】

    BZOJ2038 2009国家集训队 小Z的袜子(hose) Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼 ...

  5. [bzoj2038][2009国家集训队]小Z的袜子(hose)_莫队

    小Z的袜子 hose 2009-国家集训队 bzoj-2038 题目大意:给定一个n个袜子的序列,每个袜子有一个颜色.m次询问:每次询问一段区间中每种颜色袜子个数的平方和. 注释:$1\le n,m\ ...

  6. bzoj 2038 小Z的袜子(hose)(莫队算法)

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

  7. 【BZOJ2038】【2009国家集训队】小Z的袜子(hose) 分块+莫队

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

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

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  9. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 【莫队算法模版】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2038 题意概括: 有 N 只袜子(分别编号为1~N),有 M 次查询 (L, R)里面随机 ...

  10. BZOJ:2038: [2009国家集训队]小Z的袜子(hose)(莫队算法模板)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2038 解题心得: 第一次接触莫队算法,很神奇,很巧妙.莫队算法主要就是用来解决多次询问时 ...

随机推荐

  1. 在微信框架模块中,基于Vue&Element前端,通过动态构建投票选项,实现单选、复选的投票操作

    最近把微信框架的前端改造一下,在原来基于Bootstrap框架基础上的微信后台管理,增加一套Vue&Element的前端,毕竟Vue的双向绑定开发起来也还是很方便的,而且Element本身也提 ...

  2. 关于有符号数和无符号数的转换 - C/C++

    转载自:http://www.94cto.com/index/Article/content/id/59973.html 1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题, ...

  3. 中国排名前100的IC设计公司

    中国排名前100的IC设计公司 北京地区大唐微电子技术有限公司北京北大众志微系统科技有限责任公司北京中星微电子有限公司中国华大集成电路设计中心  北京中电华大电子设计有限责任公司  北京清华同方微电子 ...

  4. CENTOS7network config文件不能直接bak 必须建立bak目录再bak

    CENTOS7network config文件不能直接bak 必须建立bak目录再bak

  5. 二进制部署K8S-1基本概念

    二进制部署K8S-1基本概念 感谢老男孩教育王导的公开视频,文档整理自https://www.yuque.com/duduniao/k8s. 1.实验环境 1.1 虚拟机 因为在后期运行容器需要有大量 ...

  6. Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播。

    Linux是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播. Linux是众多操作系统之一 , 目前流行的服务器和 PC 端操作系统有 L ...

  7. Redis 快速集群环境搭建

    环境 Linux :centos 7 redis:redis-5.0.9 Redis 集群环境搭建步骤 早期 redis 版本集群环境搭建需要安装 ruby 运行环境,搭建步骤比较繁琐: redis ...

  8. git push 时发生错误 error: src refspec master does not match any. error: failed to push some refs to

    很多相关解决办法都是最后要 push 到远端的 master 上,但很多其实要求不能把个人的修改内容直接 push 到 master 主分支. 因此,当我想将本地 feature/work1 分支的修 ...

  9. python3 访问windows共享目录

    python3 访问windows共享目录 1.安装pysmb包 pip install pysmb 2.连接共享目录 #!/usr/bin/env python3 # -*- coding:utf- ...

  10. 新晋总监生存指南三——OKR

    一.什么是OKR 书接上文:新晋总监生存指南二--建立指标 OKR在我们团队正循环大图中占有很重的分量,好的OKR实践同时也是上文中数据指标实践的案例.反向论述可以认为,数据指标建设混乱的团队很难运用 ...