zoukankan      html  css  js  c++  java
  • BZOJ3781: 小B的询问

    3781: 小B的询问

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 146  Solved: 98
    [Submit][Status]

    Description

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

    Input

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

    Output

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

    Sample Input

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

    Sample Output

    6
    9
    5
    2

    HINT

    对于全部的数据,1<=NMK<=50000

    题解:

    裸莫队。。

    代码:

     1 #include<cstdio>
     2 
     3 #include<cstdlib>
     4 
     5 #include<cmath>
     6 
     7 #include<cstring>
     8 
     9 #include<algorithm>
    10 
    11 #include<iostream>
    12 
    13 #include<vector>
    14 
    15 #include<map>
    16 
    17 #include<set>
    18 
    19 #include<queue>
    20 
    21 #include<string>
    22 
    23 #define inf 1000000000
    24 
    25 #define maxn 100000+5
    26 
    27 #define maxm 20000000+5
    28 
    29 #define eps 1e-10
    30 
    31 #define ll long long
    32 
    33 #define pa pair<int,int>
    34 
    35 #define for0(i,n) for(int i=0;i<=(n);i++)
    36 
    37 #define for1(i,n) for(int i=1;i<=(n);i++)
    38 
    39 #define for2(i,x,y) for(int i=(x);i<=(y);i++)
    40 
    41 #define for3(i,x,y) for(int i=(x);i>=(y);i--)
    42 
    43 #define mod 1000000007
    44 #define sqr(x) (x)*(x)
    45 
    46 using namespace std;
    47 
    48 inline int read()
    49 
    50 {
    51 
    52     int x=0,f=1;char ch=getchar();
    53 
    54     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    55 
    56     while(ch>='0'&&ch<='9'){x=10*x+ch-'0';ch=getchar();}
    57 
    58     return x*f;
    59 
    60 }
    61 int n,m,k,sum,s[maxn],a[maxn],b[maxn],ans[maxn];
    62 struct rec{int id,l,r;}c[maxn];
    63 inline void update(int x,int y)
    64 {
    65     sum-=sqr(s[x]);
    66     s[x]+=y;
    67     sum+=sqr(s[x]);
    68 }
    69 inline bool cmp(const rec &x,const rec &y){return b[x.l]==b[y.l]?x.r<y.r:x.l<y.l;}
    70 
    71 int main()
    72 
    73 {
    74 
    75     freopen("input.txt","r",stdin);
    76 
    77     freopen("output.txt","w",stdout);
    78     n=read();m=read();k=read();int len=sqrt(n);
    79     for1(i,n)a[i]=read(),b[i]=(i-1)/len+1;
    80     for1(i,m)c[i].l=read(),c[i].r=read(),c[i].id=i;
    81     sort(c+1,c+m+1,cmp);
    82     int l=1,r=0;
    83     for1(i,m)
    84     {
    85         while(r<c[i].r)update(a[++r],1);
    86         while(r>c[i].r)update(a[r--],-1);
    87         while(l>c[i].l)update(a[--l],1);
    88         while(l<c[i].l)update(a[l++],-1);
    89         ans[c[i].id]=sum;
    90 
    91     }
    92     for1(i,m)printf("%d
    ",ans[i]);
    93 
    94     return 0;
    95 
    96 }  
    View Code
  • 相关阅读:
    高效代码审查的十个经验
    记事本
    cocos2d-x游戏引擎核心之十一——并发编程(消息通知中心)
    DE1-SOC开发板使用学习
    反思的话-180929
    反思的话-企业制度的作用180927
    XDS100V3连接Pandaboard ES OMAP4460开发板
    《手把手教你学DSP-基于TMS320F28335》书中的错误
    DSP28335做FFT傅里叶变换
    itop4412学习-上层应用多任务开发
  • 原文地址:https://www.cnblogs.com/zyfzyf/p/4146330.html
Copyright © 2011-2022 走看看