莫队:一种非常优雅的暴力,时间复杂度一般情况下是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. Django(2)python虚拟环境virtualenvwrapper

    python虚拟环境 虚拟环境(virtual environment),它是一个虚拟化,从电脑独立开辟出来的环境.通俗的来讲,虚拟环境就是借助虚拟机来把一部分内容独立出来,我们把这部分独立出来的东西 ...

  2. C#中的partial关键字

    这节讲一下partial(局部的,部分的)关键字,初学者可能没有接触过这个关键字,但是只要你写过winform或者WPF应用程序的话,那你肯定被动用过这个关键字.首先介绍一下这个关键字的作用,它用作定 ...

  3. Codeforces Round #661 (Div. 3)

    A. Remove Smallest 题意:数组是否满足任意i,j保证|ai-aj|<=1,如果都可以满足,输出YES,否则输出NO 思路:直接排序遍历即可 代码: 1 #include< ...

  4. multiset容器erase函数的误用

    <从缺陷中学习C/C++>第3章库函数问题,本章主要介绍库函数的使用中会遇到的问题.使用库函数可以降低软件开发的难度,提高代码编写的效率.本节为大家介绍multiset容器erase函数的 ...

  5. Gateway导航

    简介 最近都在弄微服务的东西,现在来记录下收获.我从一知半解到现在能从0搭建使用最大的感触有两点 1.微服务各大组件的版本很多,网上很多博客内容不一定适合你的版本,很多时候苦苦琢磨都是无用功 2.网上 ...

  6. centos7基于luks对磁盘进行加密

    centos7基于luks对磁盘进行加密 1,504 views A+ 所属分类:linux 收  藏 LUKS(Linux Unified Key Setup)为Linux硬盘加密提供了一种标准,它 ...

  7. Linux 系统优化-workstation实践

    Linux 系统优化 关闭SELinux [root@workstation ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/seli ...

  8. shell应用之cobbler批量部署

    如果使用的是原始源,可直接使用该脚本,如果是用的其它源且有cobbler安装包的可删除脚本中的配置yum源步骤.批量部署使用的软件有:cobbler dhcp httpd tftp-server xi ...

  9. 进程-信号相关 函数-(转自wblyuyang)

    Linux 中的进程: 程序时一个预定义的指令序列,用来完成一个特定的任务. C 编译器可以把每个源文件翻译成一个目标文件,链接器将所有的目标文件与一些必要的库链接在一起,产生一个可执行文件.当程序被 ...

  10. sprintf和snprintf函数

    printf()/sprintf()/snprintf()区别  先贴上其函数原型 printf( const char *format, ...)    格式化输出字符串,默认输出到终端-----s ...