首页 > 其他分享 >P2709 小B的询问

P2709 小B的询问

时间:2022-10-07 00:33:37浏览次数:72  
标签:cnt cur bb int 询问 P2709 dx ans

题目链接&本文的的参考文献1
本文的参考文献2(这篇文章是xiezheyuan(洛谷的一个用户的用户名)的博客里的)
另外我还采纳了同学的一些意见。
这题主要的就是对一个静态的序列进行很多次的询问。在一定的方面上这些询问是可以相互转化得到的,并且可能有些被询问的区间之间还有重叠部分,于是我们就可能会想到用莫队写这题。另外,此题中,\(n\),\(m\)的最大值都还不是特别大,所以“莫队+分块”的时间复杂度应该是不会TLE的。

Talk is cheap ,show you the code .

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,a[50005],cur,anss[50005];
struct node{
    int l,r,id;
}q[50005];
int ans,cnt[50005];
bool cmp(node aa,node bb){
    return aa.l/cur == bb.l/cur ? aa.r/cur < bb.r/cur : aa.l/cur < bb.l/cur;
}
int dx(int x){
    return x*x;
}
void add(int x){
    int y=dx(cnt[a[x]]);
    ++cnt[a[x]];
    ans=ans+dx(cnt[a[x]])-y;
}
void del(int x){
    int y=dx(cnt[a[x]]);
    --cnt[a[x]];
    ans=ans+dx(cnt[a[x]])-y;
}
signed main(){
    std::ios::sync_with_stdio(false);
    cin.tie();cout.tie();
    cin>>n>>m>>k;
    cur=(int)(sqrt(n));
    for(int i=1;i<=n;++i)
        cin>>a[i];
    for(int i=1;i<=m;++i)
        cin>>q[i].l>>q[i].r,q[i].id=i;
    sort(q+1,q+m+1,cmp);
    int l=1,r=0;
    for(int i=1;i<=m;++i){
        int ll=q[i].l,rr=q[i].r;
		while(r>rr)
            del(r--);
        while(r<rr)
            add(++r);
        while(l<ll)
            del(l++);
        while(l>ll)
            add(--l);
        anss[q[i].id]=ans;
        //cout<<l<<" "<<r<<endl;
    	//cout<<q[i].id<<" "<<ans<<endl; 
    }
    for(int i=1;i<=m;++i)
    	cout<<anss[i]<<endl;
    return 0;
}

AC Record

标签:cnt,cur,bb,int,询问,P2709,dx,ans
From: https://www.cnblogs.com/4456q/p/16758912.html

相关文章

  • 洛谷 P2709 小B的询问 题解
    莫队板子。//P2709小B的询问#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintMAXN=50005;structQuery{ intl,r,id;}q[MAXN];in......
  • Android权限询问
    Android权限询问AndroidMaifest.xml中声明权限<!--声明所有需要的权限(包括普通权限和危险权限)--><uses-permissionandroid:name="android.permission.READ_EXTERNA......
  • AcWing 4604. 集合询问
    https://www.acwing.com/problem/content/4607/哈希表题意:初始时空集{},进行t次操作,操作分为:+x,将一个非负整数x添加至集合中。注意,集合中可以存在多个相同的整......
  • 【MySQL】order by引起的慢查询问题总结
    最近遇到了一个SQL没有走索引导致出现慢查询的问题,SQL本身很简单,两张表联合查询然后进行排序和分页,由于涉及到一些业务,这里以用户表和订单表为例,用户表数据在35W左右,订单表......
  • 区间问题----多次区间修改,少次单点询问的差分
    《定义》对于原数列:a1a2a3.....aiaj........an-1an这个数列的差分为ca[j]=aj-ai这个数列的前缀和为he[j]=aj+ai+..+a2+a1 我们可以惊奇的发现差分的前缀和==原......
  • 集合询问(哈希)
    题意题目链接:https://www.acwing.com/problem/content/4607/数据范围\(1\leqt\leq10^5\)\(0\leqx<10^{18}\)\(1\leq|s|\leq18\)思路该题的关键在于如......
  • 集合询问
    集合询问有一个整数集合,初始时集合为空。现在,要对该集合进行t次操作,操作分为以下三种:+x ,将一个非负整数$x$添加至集合中。注意,集合中可以存在多个相同的整数。-......
  • 解决查询问题-分库分表后
     多维度分片需求,如何解决查询问题? 大家好,我是【架构摆渡人】,一只十年的程序猿。这是分库分表系列的第一篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果......