zoukankan      html  css  js  c++  java
  • BZOJ-4-2038: [2009国家集训队]小Z的袜子(hose)-莫队

    • 思路 :分块 思想 处理离线查询操作  对查询进行排序 在同一块内的按照 r 进行排序 不同块 的按照 L进行排序。
    • #include<bits/stdc++.h>
      using namespace std;
      #define maxn 56789
      int n,m,col[maxn],cnt[maxn],l,r,zi,mu,len,B;
      struct node
      {
          int l,r,id;
          bool operator<(const node &c)const
          {
              return  l/B==c.l/B?r<c.r:l<c.l;
          }
      } a[maxn];
      struct op
      {
          int x,y;
      } ans[maxn];
      void add(int x)
      {
          zi+=cnt[x];
          ++cnt[x];
          mu+=len;
          ++len;
      }
      void del(int x)
      {
          --cnt[x];
          zi-=cnt[x];
          --len;
          mu-=len;
      }
      int main()
      {
          scanf("%d%d",&n,&m);
          for(int i=1; i<=n; i++)
              scanf("%d",&col[i]);
          B=n/sqrt(m);
          for(int i=0; i<m; i++)
          {
              scanf("%d%d",&a[i].l,&a[i].r);
              a[i].id=i;
          }
          sort(a,a+m);
          r=zi=mu=len=0;
          l=1;
          for(int i=0; i<m; i++)
          {
              while(a[i].l<l)
                  add(col[--l]);
              while(a[i].r<r)
                  del(col[r--]);
              while(a[i].l>l)
                  del(col[l++]);
              while(a[i].r>r)
                  add(col[++r]);
              int g=__gcd(zi,mu);
              ans[a[i].id].x=zi/g;
              ans[a[i].id].y=mu/g;
          }
          for(int i=0; i<m; i++)
              printf("%d/%d
      ",ans[i].x,ans[i].y);
          return 0;
      }
      

        

  • 相关阅读:
    网页Tab控件
    ivy在eclipse中的重新加载
    es删除文档或者删除索引
    es修改数据
    es中插入数据
    创建es索引-格式化和非格式化
    MySQL常用字符串函数
    python各种类型转换
    python 3.4读取输入参数
    python异常捕获异常堆栈输出
  • 原文地址:https://www.cnblogs.com/SDUTNING/p/10245265.html
Copyright © 2011-2022 走看看