【BZOJ】3781 小B的询问 莫队

110 篇文章 0 订阅
3 篇文章 0 订阅

题目传送门

有了上一题的铺垫,这题就是一道莫队的裸题,直接用和上一题一样的套路搞就行了。

不过莫队的sort好像有些什么神奇的trick:如果两个询问左端点所在的块相同,就把右端点按左端点所在块的奇偶性分类排序,就是下面那样:(至于为什么,我也不知道)

    bool operator < (const note lyf) const {return (wz[l]<wz[lyf.l])||(wz[l]==wz[lyf.l]&&(wz[l]&1?r<lyf.r:r>lyf.r));}

剩下的就是和上一题差不多的莫队了。

附上AC代码:

#include <cstdio>
#include <cctype>
#include <cmath>
#include <algorithm>
using namespace std;

typedef long long ll;
const int N=5e4+10;
int n,m,k,size,c[N],wz[N];
struct note{
    int l,r,pos;
    bool operator < (const note lyf) const {return (wz[l]<wz[lyf.l])||(wz[l]==wz[lyf.l]&&(wz[l]&1?r<lyf.r:r>lyf.r));}
}a[N];
ll ans,out[N],s[N];

inline char nc(void){
    static char ch[100010],*p1=ch,*p2=ch;
    return p1==p2&&(p2=(p1=ch)+fread(ch,1,100010,stdin),p1==p2)?EOF:*p1++;
}

inline void read(int &a){
    static char c=nc();int f=1;
    for (;!isdigit(c);c=nc()) if (c=='-') f=-1;
    for (a=0;isdigit(c);a=(a<<3)+(a<<1)+c-'0',c=nc());
    a*=f;return;
}

inline void updata(int x,int w){return (void)(ans+=s[c[x]]*2ll*w+1,s[c[x]]+=1ll*w);}

int main(void){
    read(n),read(m),read(k),size=sqrt(n);
    for (int i=1; i<=n; ++i) read(c[i]),wz[i]=(i-1)/size+1;
    for (int i=1; i<=m; ++i) read(a[i].l),read(a[i].r),a[i].pos=i;
    sort(a+1,a+1+m);
    for (int i=1,l=1,r=0; i<=m; ++i){
        for (; r<a[i].r; ++r) updata(r+1,1);
        for (; r>a[i].r; --r) updata(r,-1);
        for (; l<a[i].l; ++l) updata(l,-1);
        for (; l>a[i].l; --l) updata(l-1,1);
        out[a[i].pos]=ans;
    }
    for (int i=1; i<=m; ++i) printf("%lld\n",out[i]);
    return 0;
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值