BZOJ 2038: [2009国家集训队]小Z的袜子(hose)
题目描述
与 小B的询问 类似
对于一段区间[l,r],任选两个数构成排列的方案数A(r-l+1,2)=(r-l+1)*(r-l)
设num[i]为i在区间[l,r]内重复的次数,那么选出的两个数都是i的方案有num[i]*(num[i]-1)=num[i]2-num[i]种
那么在[l,r]选出相同的数的方案就有
sigma(num[i]2-num[i])=sigma(num[i]2)-(r-l+1)
//因为只有在[l,r]出现过的数字i的num[i]才不为零,所以sigma(num[i])就是区间长度
#include<complex> #include<cstdio> #include<algorithm> using namespace std; const int N=5e4+7; struct node{int l,r,id; }q[N]; int n,m; int a[N],pos[N],num[N]; long long ansx[N],ansy[N]; int qread() {int x=0;char ch=getchar();while(ch<'0' || ch>'9')ch=getchar();while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}return x; } bool cmp(const node &a,const node &b) {if(pos[a.l]==pos[b.l])return a.r<b.r;return pos[a.l]<pos[b.l]; } long long Gcd(long long a,long long b) {if(!b)return a;return Gcd(b,a%b); } void change(long long &tot,int id,int add) {tot+=2*add*num[a[id]]+1;num[a[id]]+=add; } int main() {scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)a[i]=qread();for(int i=1;i<=m;i++){q[i].l=qread();q[i].r=qread();q[i].id=i;}long long tmp=sqrt(n);for(int i=1;i<=n;i++)pos[i]=(i-1)/tmp+1;sort(q+1,q+m+1,cmp);int a=0,b=0,l=1,r=0;long long tot=0;for(int i=1;i<=m;i++){while(l<q[i].l)change(tot,l++,-1);while(l>q[i].l)change(tot,--l,1);while(r<q[i].r)change(tot,++r,1);while(r>q[i].r)change(tot,r--,-1);if(q[i].l==q[i].r){ansx[q[i].id]=0;ansy[q[i].id]=1;continue;}ansx[q[i].id]=tot-(r-l+1);ansy[q[i].id]=1ll*(q[i].r-q[i].l+1)*(q[i].r-q[i].l);tmp=Gcd(ansx[q[i].id],ansy[q[i].id]);ansx[q[i].id]/=tmp;ansy[q[i].id]/=tmp;}for(int i=1;i<=m;i++)printf("%lld/%lld\n",ansx[i],ansy[i]);return 0; }
转载于:https://www.cnblogs.com/LeTri/p/8570154.html
BZOJ 2038: [2009国家集训队]小Z的袜子(hose)相关推荐
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 9894 Solved: 4561 [Su ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块
分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2938 Solved: 13 ...
- 莫队(bzoj 2038: [2009国家集训队]小Z的袜子(hose))
莫队也是暴力的一种,不过可以很有效的降低复杂度 如果我们已知[l, r]的答案,能在O(1)时间得到[l+1,r]的答案以及[l, r-1]的答案,即可使用莫队算法. 时间复杂度为O(n^1.5).如 ...
- [BZOJ 2038][2009国家集训队]小Z的袜子(hose)(莫队)
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...
- bzoj - 2038: [2009国家集训队]小Z的袜子(hose)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 莫队算法可以解决一类不修改.离线查询问题.而这题可以用莫队来做. *我是看这个论文学 ...
- 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门
题目链接:2038: [2009国家集训队]小Z的袜子(hose) 题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再 ...
- 莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)
题目传送门 1 /* 2 莫队算法:求出[l, r]上取出两只相同袜子的个数. 3 莫队算法是离线处理一类区间不修改查询类问题的算法.如果你知道了[L,R]的答案,可以在O(1)的时间下得到 4 [L ...
- 2038: [2009国家集训队]小Z的袜子(hose)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 15879 Solved: 7205 [S ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(莫队算法例题)
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...
最新文章
- java获取jsp页面参数_jsp页面中获取servlet请求中的参数方法总结
- Excel Sheet Column Number
- 特殊的IP地址与端口
- 电动力学每日一题 2021/10/14
- 面试题整理 1:将一个字符串转换为整数
- [翻译] NumSharp的数组切片功能 [:]
- HealthKit教程 Swift版:锻炼信息
- ~~筛法求欧拉函数(附模板题)
- 知乎热议!学完 Python 之后,我的编程能力竟然退化了!
- mysql api是什么意思_什么是mysql c api? 解析mysql c api简单应用
- 未能创建可接受的游标。
- 双曲调频信号matlab仿真,matlab 实现线性调频信号以及分析处理
- QQxml和json代码生成卡片的方法
- 「新功能」对接金蝶云星空K3 Cloud插件支持版本升级
- Unity自定义创建脚本模板菜单
- 经典编程题——回文问题
- java获取文件列表,[javaSE] java获取文件列表
- 数据分析师招聘岗位分析
- 【论文研读】-Thread-level transactional memory(TTM)
- vue2-3版本笔记
热门文章
- 基于Nanopi NEO开发板的套接字编程!
- python五十二:__setattr__,__delattr__,__getattr__方法
- 关于http中Transfer-Encoding
- 二十年后的回眸(5)——一部单车闯天下
- 查看本地计算机已安装HOTFIX 几种方法
- OpenCV meanshift目标追踪
- mageia linux 5.1 内核,Linux 5.10 LTS发布 为近期最重要的内核版本之一
- 百度资源管理平台 站长工具 批量添加主站域名 子站域名 域名主动推送
- Rcysoft PDF Watermark Pro中文版
- MSC EASY5 2020中文版