[bzoj2038][2009国家集训队]小Z的袜子(hose)_莫队
小Z的袜子 hose 2009-国家集训队 bzoj-2038
题目大意:给定一个n个袜子的序列,每个袜子有一个颜色。m次询问:每次询问一段区间中每种颜色袜子个数的平方和。
注释:$1\le n,m\le 5\cdot 10^4$。
想法:
莫队算法的第一道例题。
每次左指针和右指针动的时候注意平方即可,
最后,附上丑陋的代码... ...
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <cmath>
- using namespace std;
- #define N 80050
- struct Node
- {
- int s,t,id;
- int ans;
- }a[N];
- int now;
- int n,q,block,pos[N],h[N],c[N];
- inline bool cmp1(const Node &x,const Node &y)
- {
- if(pos[x.s]==pos[y.s]) return x.t<y.t;
- return pos[x.s]<pos[y.s];
- }
- inline bool cmp2(const Node &x,const Node &y)
- {
- return x.id<y.id;
- }
- void update(int x,int sig)
- {
- if(sig==1)
- {
- now+=h[c[x]];
- h[c[x]]++;
- }
- else
- {
- now-=h[c[x]]-1;
- h[c[x]]--;
- }
- /*now-=h[c[x]];
- h[c[x]]+=sig;
- now+=h[c[x]];*/
- }
- void print(int x)
- {
- int b=a[x].ans,d=1ll*(a[x].t-a[x].s)*(a[x].t-a[x].s+1)/2;
- if(b==0)
- {
- puts("0/1");return;
- }
- int gcd=__gcd(b,d);
- printf("%d/%d\n",b/gcd,d/gcd);
- }
- int main()
- {
- scanf("%d%d",&n,&q);
- int i,l,r=0,j;
- for(i=1;i<=n;++i) scanf("%d",&c[i]);
- if(!n)return 0;
- int size=sqrt(n);
- block=n/size;
- for(i=1;i<=block;++i)
- {
- l=r+1;
- r=i*size;
- for(j=l;j<=r;++j)
- {
- pos[j]=i;
- }
- }
- if(r!=n)
- {
- l=r+1;
- r=n;
- block++;
- for(i=l;i<=r;++i)
- {
- pos[i]=block;
- }
- }
- for(i=1;i<=q;++i)scanf("%d%d",&a[i].s,&a[i].t),a[i].id=i;
- sort(a+1,a+q+1,cmp1);
- for(l=1,r=0,i=1;i<=q;++i)
- {
- if(a[i].s==a[i].t)
- {
- a[i].ans=0;
- continue;
- }
- while(l<a[i].s)update(l,-1),l++;
- while(l>a[i].s)update(l-1,1),l--;
- while(r<a[i].t)update(r+1,1),r++;
- while(r>a[i].t)update(r,-1),r--;
- a[i].ans=now;
- }
- sort(a+1,a+q+1,cmp2);
- for(i=1;i<=q;i++)
- {
- print(i);
- }
- }
小结:莫队真可爱/ka
[bzoj2038][2009国家集训队]小Z的袜子(hose)_莫队的更多相关文章
- BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队
BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无 ...
- BZOJ2038 2009国家集训队 小Z的袜子(hose) 【莫队】
BZOJ2038 2009国家集训队 小Z的袜子(hose) Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼 ...
- BZOJ2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)
神奇的莫队算法,用来解决可离线无修改的区间查询问题: 首先对原序列进行分块,√n块每块√n个: 然后对所有查询的区间[l,r]进行排序,首先按l所在的块序号升序排序,如果一样就按r升序排序: 最后就按 ...
- 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 ...
- 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 解题心得: 第一次接触莫队算法,很神奇,很巧妙.莫队算法主要就是用来解决多次询问时 ...
- bzoj 2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2038 [题意] 给定一个有颜色的序列,回答若干个询问:区间内任选两个颜色相同的概率. ...
随机推荐
- 273 Integer to English Words 整数转换英文表示
将非负整数转换为其对应的英文表示,给定的输入是保证小于 231 - 1 的.示例:123 -> "One Hundred Twenty Three"12345 -> & ...
- RabbitMQ指南之五:主题交换器(Topic Exchange)
在上一章中,我们完善了我们的日志系统,用direct交换器替换了fanout交换器,使得我们可以有选择性地接收消息.尽管如此,仍然还有限制:不能基于多个标准进行路由.在我们的日志系统中,我们可能不仅希 ...
- Django基础之admin功能
Django默认开起了后台 1.访问admin后台 2.用户和密码进行登录 ============================================================== ...
- Python 将中文转拼音
文字转拼音 import os.path class PinYin(object): def __init__(self): self.word_dict = {} def load_word(sel ...
- tensorboard在windows系统浏览器显示空白的解决
一个简单的using_tensorboard.py程序,如下: #using_tensorboard.py import tensorflow as tf a = tf.constant(10,nam ...
- Struts工作机制
Struts工作机制? 为什么要使用Struts?工作机制:Struts的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config. ...
- 处理sql锁死问题
--SQL Server死锁的查询方法: exec master.dbo.p_lockinfo 0,0; ---显示死锁的进程,不显示正常的进程 exec master.dbo.p_locki ...
- 观察者模式在Foundation框架通知中的应用
GitHub传送门 1.何为观察者模式? 观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新. 举个简单的例子:你和你的舍友都订阅了 ...
- 01Struts 2
Struts 2 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交 ...
- Leetcode724:寻找数组的中心索引(java、python3)
寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相 ...