zoukankan      html  css  js  c++  java
  • 【bzoj3781】小B的询问 莫队算法

    原文地址:http://www.cnblogs.com/GXZlegend/p/6803821.html


    题目描述

    小B有一个序列,包含N个1~K之间的整数。他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数。小B请你帮助他回答询问。

    输入

    第一行,三个整数N、M、K。
    第二行,N个整数,表示小B的序列。
    接下来的M行,每行两个整数L、R。

    输出

    M行,每行一个整数,其中第i行的整数表示第i个询问的答案。

    样例输入

    6 4 3
    1 3 2 1 1 3
    1 4
    2 6
    3 5
    5 6

    样例输出

    6
    9
    5
    2


    题解

    莫队算法模板题,优雅的暴力

    设原来有n个某颜色,加1后对答案的贡献为(n+1)^2-n^2=2*n+1,减1对答案的贡献为(n-1)^2-n^2=-(2*n-1)。

    然后各种区间平移得到答案。

    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    #define N 50010
    using namespace std;
    struct data
    {
    	int l , r , b , p;
    }a[N];
    int c[N];
    long long ans[N] , cnt[N];
    bool cmp(data x , data y)
    {
    	return x.b == y.b ? x.r < y.r : x.b < y.b;
    }
    int main()
    {
    	int n , m , k , i , si , lp = 1 , rp = 0 , now = 0;
    	scanf("%d%d%d" , &n , &m , &k);
    	si = (int)sqrt(n);
    	for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &c[i]);
    	for(i = 1 ; i <= m ; i ++ ) scanf("%d%d" , &a[i].l , &a[i].r) , a[i].b = (a[i].l - 1) / si , a[i].p = i;
    	sort(a + 1 , a + m + 1 , cmp);
    	for(i = 1 ; i <= m ; i ++ )
    	{
    		while(lp < a[i].l) now -= 2 * cnt[c[lp]] - 1 , cnt[c[lp]] -- , lp ++ ;
    		while(rp > a[i].r) now -= 2 * cnt[c[rp]] - 1 , cnt[c[rp]] -- , rp -- ;
    		while(lp > a[i].l) lp -- , now += 2 * cnt[c[lp]] + 1 , cnt[c[lp]] ++ ;
    		while(rp < a[i].r) rp ++ , now += 2 * cnt[c[rp]] + 1 , cnt[c[rp]] ++ ;
    		ans[a[i].p] = now;
    	}
    	for(i = 1 ; i <= m ; i ++ ) printf("%lld
    " , ans[i]);
    	return 0;
    }

     

  • 相关阅读:
    转!!javaMail使用网易163邮箱报535 Error: authentication failed
    银行卡验证(验证是否存在,卡号类型,归属行)
    Navicat已经成功连接,密码忘记的解决方法
    Inline&IAT Hook原理
    x64dbg尝鲜
    C# 通过Dynamic访问System.Text.Json对象
    dotnet5将asp.net webapi宿主到wpf
    Asp.Net5 MVC with Vue.js
    在 Visual Studio 中使用跟踪点将信息记录到“输出”窗口中
    WPF带阴影的无边框窗体
  • 原文地址:https://www.cnblogs.com/GXZlegend/p/6803821.html
Copyright © 2011-2022 走看看