题干

就是将$add$和$del$函数里的$ans$变化变成组合数嘛,

先预处理出$x$只相同袜子一共有$f[x] = 1+2+...+$$(x-1)$种组合,

要注意,由于$f[x]$是一直加到$x-1$,所以我们要$add,del$两个函数中都要关注这个问题:

  $add$函数要先更改$ans$数值再改$cnt$,$del$函数要先更改$cnt$再改$ans$数值

再就是直接套莫队板子了,板子还是注意给问题排序时要分块

当然小学数学老师教过我们,分数再最后要约分

上代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define ll long long
#define NUM 50010
using namespace std;
ll f[NUM];//预处理的组合数
int a[NUM],cnt[NUM];
int n,m;
struct wen{
int l,r,num;
};
wen q[NUM];//存下每个问题
int blo;//每个块内的元素数量
bool cmp( wen x,wen y ){
if( x.r/blo == y.r/blo ) return x.l < y.l;
return x.r < y.r;
}
ll ans;
void add( int x ){
ans += cnt[a[x]];
cnt[a[x]]++;
}
void del( int x ){
cnt[a[x]]--;
ans -= cnt[a[x]];
}
struct da{
ll zi,mu;//对于每个问题的答案的分子分母
};
da anss[NUM];
ll gcd( int x,int y ){
if( x < y ) swap( x,y );
if( y == 0 ) return x;
return gcd( y,x%y );
}
int main(){
cin >> n >> m;
blo = sqrt(n);
for( int i = 1;i <= n;i++ )
f[i] = f[i-1] + i;
for( int i = 1;i <= n;i++ )
cin >> a[i];
for( int i = 1;i <= m;i++ ){
cin >> q[i].l >> q[i].r;
q[i].num = i;
}
sort( q+1,q+m+1,cmp );
int l = 1,r = 0,ql,qr;
for( int i = 1;i <= m;i++ ){
ql = q[i].l,qr = q[i].r;
if( qr == ql ){ //如题干所言,特判
anss[q[i].num].zi = 0;
anss[q[i].num].mu = 1;
continue;
}
while( l < ql ){
del( l );
l++;
}
while( r > qr ){
del( r );
r--;
}
while( l > ql ){
l--;
add( l );
}
while( r < qr ){
r++;
add( r );
}
ll mu = f[qr-ql],p = gcd( ans,mu );
anss[q[i].num].zi = ans/p;
anss[q[i].num].mu = mu/p;//约分
}
for( int i = 1;i <= m;i++ )
cout << anss[i].zi << "/" << anss[i].mu << endl;
return 0;
}

最新文章

  1. T-Sql(三)存储过程(Procedure)
  2. codeforces 723C : Polycarp at the Radio
  3. 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【外传】——Attribute Routing
  4. 新找到一个安装Android SDk的方法-记录
  5. Quantum &amp; r2q
  6. mysql开启全文索引功能
  7. ArcGIS操作问题
  8. IFrame中Session丢失的解决办法
  9. ImportError: cannot import name webdriver问题解决
  10. Swift与Objective-C API的交互
  11. CMake入门指南
  12. 解决EJB本地调用“java.lang.ClassCastException: $Proxy96 cannot be cast to com.tgb.ejb.UserManager”异常
  13. Spring中Model、ModelMap及ModelAndView之间的区别
  14. 转 -- 详解python的super()的作用和原理
  15. SCU 4437 Carries(二分乱搞)题解
  16. Cocos Creator 脚本模板
  17. Fragment与Radiogroup联动,经典的主界面布局。使用show和hide的方式实现;
  18. HttpClient 4 和 HttpClient 3 超时
  19. 18_集合框架_第18天_集合、Iterator迭代器、增强for循环 、泛型_讲义
  20. [python]一个关于默认参数的老问题和一个有关优化的新问题

热门文章

  1. 标准输入输出() &amp; 打印流 &amp;配置文件
  2. spring 拦截器流程 HandlerInterceptor AsyncHandlerInterceptor HandlerInterceptorAdapter
  3. ThinkPHP V6.0.12在php8.1下验证码出现问题
  4. AM57x 多核SoC开发板——GPMC的多通道AD采集综合案例手册(上)
  5. DirectX11--CPU与GPU计时器
  6. 以人类 Person 为基类设计学生类 Student 和教师类 Teacher
  7. 动态调试JS脚本文件:(JS源映射 - sourceURL)与 debugger
  8. 李呈祥:bilibili在湖仓一体查询加速上的实践与探索
  9. JS数组at函数(获取最后一个元素的方法)介绍
  10. 记安装AWVS14过程踩的坑