小Z的袜子(hose) &&作业 (莫队)
莫队:一种非常优雅的暴力,时间复杂度一般情况下是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) &&作业 (莫队)的更多相关文章
- BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队
BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无 ...
- 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 ...
- BZOJ2038 2009国家集训队 小Z的袜子(hose) 【莫队】
BZOJ2038 2009国家集训队 小Z的袜子(hose) Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼 ...
- [bzoj2038][2009国家集训队]小Z的袜子(hose)_莫队
小Z的袜子 hose 2009-国家集训队 bzoj-2038 题目大意:给定一个n个袜子的序列,每个袜子有一个颜色.m次询问:每次询问一段区间中每种颜色袜子个数的平方和. 注释:$1\le n,m\ ...
- bzoj 2038 小Z的袜子(hose)(莫队算法)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 11542 Solved: 5166[Sub ...
- 【BZOJ2038】【2009国家集训队】小Z的袜子(hose) 分块+莫队
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- 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 解题心得: 第一次接触莫队算法,很神奇,很巧妙.莫队算法主要就是用来解决多次询问时 ...
随机推荐
- c++通讯录管理系统
代码拷贝 #include<iostream> #include<string> #include<stdlib.h> #define MAX 1000 using ...
- Java_接口回调与匿名内部类
匿名内部类 警告:匿名内部类本质上是一个对象 如果有一个接口或者抽象类,必须要用class定义一个实现类写重写抽象方法,才能创建对象并使用. 匿名内部类就是省略了用class定义子类的过程,直接使用父 ...
- python双曲线拟合
待拟合函数 y = alpha * pow(x, beta) 输入: x数组,y数组 输出: alpha,beta,相关系数R2 from scipy.optimize import leastsq ...
- [bug] Openresty:content_by_lua_file 404
参考 http://www.javaear.com/question/28087228.html https://github.com/openresty/openresty.org/issues/1 ...
- [BD] Hive
简介 基于HDFS的数据仓库工具 基于HDFS上的数据分析引擎 2.x 前:SQL -----> Hive ----> MapReduce 2.x 后:推荐执行引擎为 Spark 支持S ...
- Https实践
https实践 常用端口 ssh 22 telnet 23 ftp 21 rsync 873 http 80 mysql 3306 redis 6379 https 443 dns 53 php 90 ...
- component: resolve => require(['../pages/home.vue'], resolve)-装载
import Vue from 'vue'import VueRouter from 'vue-router'// "@"相当于".."import Detai ...
- kvm虚拟化网络管理(5)
一.Linux Bridge网桥管理 网络虚拟化是虚拟化技术中最复杂的部分,也是非常重要的资源. 第一节中我们创建了一个名为br0的linux-bridge网桥,如果在此网桥上新建一台vm,如下图: ...
- Apache Flink 1.12.0 正式发布,DataSet API 将被弃用,真正的流批一体
Apache Flink 1.12.0 正式发布 Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 的开发,提交 ...
- 『动善时』JMeter基础 — 25、JMeter参数化补充练习
目录 1.使用"CSV数据文件设置"组件实现参数化 (1)测试计划中的元件 (2)数据文件内容 (3)线程组元件内容 (4)HTTP信息头管理器组件内容 (5)CSV数据文件设置组 ...