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

    题目链接

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 inline int read()
     5 {
     6     int x=0,f=1;char ch=getchar();
     7     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
     8     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
     9     return x*f;
    10 }
    11 
    12 /********************************************************************/
    13 
    14 const int maxn = 50000+5;
    15 int n, m;
    16 int a[maxn];
    17 int sz, belong[maxn];
    18 ll ans, num[maxn];
    19 ll up[maxn], dw[maxn];     //分子, 分母
    20 
    21 struct node{
    22     int l, r;
    23     int id;
    24 }q[maxn];
    25 
    26 ll gcd(ll x, ll y){
    27     if(y == 0) return x;
    28     else gcd(y, x%y);
    29 }
    30 
    31 bool cmp(node x, node y){
    32     if(belong[x.l] == belong[y.l])
    33         return x.r < y.r;
    34     else
    35         return belong[x.l] < belong[y.l];
    36 }
    37 
    38 void update(int x, int d){
    39     ans -= num[a[x]]*num[a[x]];
    40     num[a[x]] += d;
    41     ans += num[a[x]]*num[a[x]];
    42 }
    43 
    44 int main(){
    45     n = read(); m =read();
    46     sz = ceil(sqrt(n*1.0));
    47     for(int i =  1;i <= n;i++){
    48         a[i] = read();
    49         belong[i] = (i-1)/sz;
    50     }
    51     for(int i = 1;i <= m;i++){
    52         q[i].l = read(); q[i].r = read();
    53         q[i].id = i;
    54     }
    55     sort(q+1, q+1+m, cmp);
    56     int pl = 1, pr = 0;
    57     ans = 0;
    58     for(int i = 1;i <= m;i++){
    59         int id = q[i].id;
    60         if(q[i].l == q[i].r){
    61             up[id] = 0; dw[id] = 1;
    62             continue;
    63         }
    64         if(pr < q[i].r){
    65             for(int j = pr + 1;j <= q[i].r;j++){
    66                 update(j, 1);
    67             }
    68         }
    69         else{
    70             for(int j = pr;j > q[i].r;j--){
    71                 update(j, -1);
    72             }
    73         }
    74         pr = q[i].r;
    75         if(pl < q[i].l){
    76             for(int j = pl;j < q[i].l;j++){
    77                 update(j, -1);
    78             }
    79         }
    80         else {
    81             for(int j = pl - 1;j >= q[i].l;j--){
    82                 update(j, 1);
    83             }
    84         }
    85         pl = q[i].l;
    86         ll aa = ans - q[i].r + q[i].l - 1;
    87         ll bb = 1ll*(q[i].r - q[i].l + 1)*(q[i].r - q[i].l);
    88         ll cc = gcd(aa, bb);
    89         up[id] = aa/cc; dw[id] = bb/cc;
    90     }
    91     for(int i = 1;i <= m;i++){
    92         printf("%lld/%lld
    ", up[i], dw[i]);
    93     }
    94     return 0;
    95 }
  • 相关阅读:
    VMware下ubuntu与win8共享文件时/mnt/hgfs目录为空的解决办法
    Flex Array内置排序方法的使用
    Flex 选项卡加载方式简介
    Flash Builder 4.6 基本设置
    Flash Builder 4.6 找不到所需的Adobe Flash Player
    2 python--工具pycharm
    1 python--安装
    安装aix补丁包
    python_day02 上节课知识点回顾
    vue组件局部与全局注册的区别
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/9614952.html
Copyright © 2011-2022 走看看