题目描述

与 小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)相关推荐

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

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

  2. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块

    分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2938  Solved: 13 ...

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

    莫队也是暴力的一种,不过可以很有效的降低复杂度 如果我们已知[l, r]的答案,能在O(1)时间得到[l+1,r]的答案以及[l, r-1]的答案,即可使用莫队算法. 时间复杂度为O(n^1.5).如 ...

  4. [BZOJ 2038][2009国家集训队]小Z的袜子(hose)(莫队)

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

  5. bzoj - 2038: [2009国家集训队]小Z的袜子(hose)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 莫队算法可以解决一类不修改.离线查询问题.而这题可以用莫队来做. *我是看这个论文学 ...

  6. 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门

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

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

    题目传送门 1 /* 2 莫队算法:求出[l, r]上取出两只相同袜子的个数. 3 莫队算法是离线处理一类区间不修改查询类问题的算法.如果你知道了[L,R]的答案,可以在O(1)的时间下得到 4 [L ...

  8. 2038: [2009国家集训队]小Z的袜子(hose)

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 15879  Solved: 7205 [S ...

  9. BZOJ 2038: [2009国家集训队]小Z的袜子(莫队算法例题)

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

最新文章

  1. java获取jsp页面参数_jsp页面中获取servlet请求中的参数方法总结
  2. Excel Sheet Column Number
  3. 特殊的IP地址与端口
  4. 电动力学每日一题 2021/10/14
  5. 面试题整理 1:将一个字符串转换为整数
  6. [翻译] NumSharp的数组切片功能 [:]
  7. HealthKit教程 Swift版:锻炼信息
  8. ~~筛法求欧拉函数(附模板题)
  9. 知乎热议!学完 Python 之后,我的编程能力竟然退化了!
  10. mysql api是什么意思_什么是mysql c api? 解析mysql c api简单应用
  11. 未能创建可接受的游标。
  12. 双曲调频信号matlab仿真,matlab 实现线性调频信号以及分析处理
  13. QQxml和json代码生成卡片的方法
  14. 「新功能」对接金蝶云星空K3 Cloud插件支持版本升级
  15. Unity自定义创建脚本模板菜单
  16. 经典编程题——回文问题
  17. java获取文件列表,[javaSE] java获取文件列表
  18. 数据分析师招聘岗位分析
  19. 【论文研读】-Thread-level transactional memory(TTM)
  20. vue2-3版本笔记

热门文章

  1. 基于Nanopi NEO开发板的套接字编程!
  2. python五十二:__setattr__,__delattr__,__getattr__方法
  3. 关于http中Transfer-Encoding
  4. 二十年后的回眸(5)——一部单车闯天下
  5. 查看本地计算机已安装HOTFIX 几种方法
  6. OpenCV meanshift目标追踪
  7. mageia linux 5.1 内核,Linux 5.10 LTS发布 为近期最重要的内核版本之一
  8. 百度资源管理平台 站长工具 批量添加主站域名 子站域名 域名主动推送
  9. Rcysoft PDF Watermark Pro中文版
  10. MSC EASY5 2020中文版