当前位置: 首页 > news >正文

题解 P1494 【[国家集训队]小Z的袜子】

莫队

话说这国家集训队的题目应该是老题,比较水。

其它大佬已经说出了需要求出的东西:

\(\frac{(num[1]^2+num[2]^2+num[3]^2...num[n]^2-(R-L+1))}{(R-L+1)*(R-L)}\)的最简单形态。其中\(num[i]\)表示一个数字的出现次数。

而我们只需要求出\(num[1]^2+num[2]^2+num[3]^2...num[n]^2\)。莫队可以实现每一个数字的出现次数,然后每次统计答案的时候注意一下。记得答案要最简模式,所以要用\(GCD\),注意\(l=r\)的情况。

最后告诉大家一个好东西,在用莫队时,一个块的数量最好是\(\frac{N}{15}\)~\(\frac{N}{20}\)。如果只是单纯的打\(\sqrt{N}\),你可能会超时。对于\(Pascal\)选手,这两个的差别将近\(1s\)

\(Code\)

// luogu-judger-enable-o2
var
    node_num,i,j,n,m,l,r:longint;
    num:array[-1..510000] of int64;
    id,left,right,recf:array[-1..510000] of int64;
    bucket:array[-1..1010007] of int64;
    ans:array[1..2,-1..510000] of int64;
    p,k,sum:int64;

procedure Sort(l,r:longint);
var
    i,j,s,t:longint;
begin
    i:=l; j:=r; s:=(l+r) div 2;
    repeat
        while ((recf[i]<recf[s])or((recf[i]=recf[s])and(right[i]<right[s]))) do inc(i);
        while ((recf[j]>recf[s])or((recf[j]=recf[s])and(right[j]>right[s]))) do dec(j);
        if i<=j then
        begin
            t:=recf[i];  recf[i]:=recf[j];   recf[j]:=t;
            t:=id[i];    id[i]:=id[j];       id[j]:=t;
            t:=left[i];  left[i]:=left[j];   left[j]:=t;
            t:=right[i]; right[i]:=right[j]; right[j]:=t;
            inc(i); dec(j);
         end;
    until i>=j;
    if i<r then Sort(i,r);
    if j>l then Sort(l,j);
end;

function Locate(node:longint):longint;
begin
    if node mod node_num=0 then
        exit(node div node_num);
    exit(node div node_num+1);
end;


procedure Ready;
begin
    read(n,m);
    node_num:=n div 17;
    for i:=1 to n do read(num[i]);
    for i:=1 to m do
    begin id[i]:=i; read(left[i],right[i]); recf[i]:=Locate(left[i]); end;

    Sort(1,m);
end;

procedure add(x:longint); 
begin
    dec(sum,bucket[x]*bucket[x]);
    inc(bucket[x]);
    inc(sum,bucket[x]*bucket[x]);
end;

procedure dim(x:longint);
begin
    dec(sum,bucket[x]*bucket[x]);
    dec(bucket[x]);
    inc(sum,bucket[x]*bucket[x]);
end;

function gcd(a_,b_:int64):int64;
var
    a,b,c:int64;
begin
    a:=a_;
    b:=b_;
    repeat
        c:=a mod b;
        a:=b;
        b:=c;
    until b=0;
    exit(a);
end;

begin
    Ready;
    l:=1;
    r:=0;
    for i:=1 to m do
    begin
        while r<right[i] do begin  inc(r); add(num[r]); end;
        while r>right[i] do begin dim(num[r]); dec(r); end;
        while l<left[i] do begin dim(num[l]); inc(l); end;
        while l>left[i] do begin dec(l); add(num[l]); end;
        if left[i]=right[i] then
        begin
            ans[1,id[i]]:=0;
            ans[2,id[i]]:=1;
        end
        else
        begin
            p:=(right[i]-left[i]+1)*(right[i]-left[i]);
            k:=gcd((sum-(right[i]-left[i]+1)),p);
            ans[1,id[i]]:=(sum-(right[i]-left[i]+1)) div k;
            ans[2,id[i]]:=p div k;
        end;
    end;

    for i:=1 to m do
        writeln(ans[1,i],'/',ans[2,i]);
end.

转载于:https://www.cnblogs.com/FibonacciHeap/articles/9691947.html

相关文章:

  • JQuery Mobile - 解决切换页面时,闪屏,白屏等问题
  • codeforce round#511
  • HDU 5763 Another Meaning (KMP/哈希+DP)
  • 阻止冒泡,阻止默认事件
  • eclipse安装详解以及遇到的问题
  • org.hibernate.hql.internal.ast.QuerySyntaxException: Ledger is not mapped [......]报错解决
  • cc2540-led/timer
  • POJ 1741 点分治
  • 深入解析Java反射(1) - 基础
  • linux zip tar
  • KindEditor 简单使用笔记
  • iOS客户端与网页交互文档
  • react简书
  • UI优化策略-UI性能优化技巧
  • pygame中多个class类之间的关系
  • 深入了解以太坊
  • hexo+github搭建个人博客
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【node学习】协程
  • 【个人向】《HTTP图解》阅后小结
  • Angular 响应式表单 基础例子
  • gitlab-ci配置详解(一)
  • jQuery(一)
  • JS数组方法汇总
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • PermissionScope Swift4 兼容问题
  • php面试题 汇集2
  • Promise面试题,控制异步流程
  • Ruby 2.x 源代码分析:扩展 概述
  • vue中实现单选
  • Webpack 4 学习01(基础配置)
  • 百度地图API标注+时间轴组件
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 开发基于以太坊智能合约的DApp
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端面试题总结
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 通过几道题目学习二叉搜索树
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • PostgreSQL之连接数修改
  • 阿里云移动端播放器高级功能介绍
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #1015 : KMP算法
  • #Linux(帮助手册)
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (poj1.2.1)1970(筛选法模拟)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (补)B+树一些思想
  • (第一天)包装对象、作用域、创建对象
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848