• bzoj3781 小B的询问


    题目

    luogu2709

    bzoj3781

    题解

    很裸的一道莫队

    最近真的是,感觉自己完全不在状态,几道题WA N遍过不了,最后发现全部都是类型出问题,int直接赋给longlong,longlong输出用%d !!?

    啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,我怕是大寿将至了

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #define N 50005
    #define ll long long 
    using namespace std;
    
    int n,m,k,b[N];
    int block,blo[N];
    ll cnt,ans[N],sum[N];
    
    struct node
    {
    	int l,r,id;
    }q[N];
    
    bool cmp(node x,node y)
    {
    	if(blo[x.r]!=blo[y.r]) return blo[x.r]<blo[y.r];
    	return blo[x.l]<blo[y.l];
    }
    
    void update(int x,int deta)
    {
    	cnt-=sum[b[x]]*sum[b[x]];
    	sum[b[x]]+=(ll)deta;//* int赋给longlong要强制转换
    	cnt+=sum[b[x]]*sum[b[x]];
    }
    
    int main()
    {
    	scanf("%d%d%d",&n,&m,&k);block=sqrt(n); 
    	for(int i=1;i<=n;i++) scanf("%d",&b[i]),blo[i]=(i-1)/block+1;
    	for(int i=1;i<=m;i++) scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i;
    	sort(q+1,q+1+m,cmp);
    	int pr=0,pl=1;
    	for(int i=1;i<=m;i++)
    	{
    		int id=q[i].id;
    		if(q[i].l==q[i].r){ans[id]=1;continue;}
    		if(q[i].r>pr) for(int j=pr+1;j<=q[i].r;j++) update(j,1);
    		else for(int j=pr;j>q[i].r;j--) update(j,-1);
    		if(q[i].l>pl) for(int j=pl;j<q[i].l;j++) update(j,-1);
    		else for(int j=pl-1;j>=q[i].l;j--) update(j,1);
    		pr=q[i].r;pl=q[i].l;
    		ans[id]=cnt;
    	}
    	for(int i=1;i<=m;i++) printf("%lld
    ",ans[i]);
    	return 0;
    }
  • 相关阅读:
    Xftp6 和 Xshell 6 下载与安装使用
    Oracle 11 安装教程(桌面类)
    Oracle 11 安装 提示环境不满足最低要求解决方案
    FICO年终完全手册
    SAP月结操作讲解
    ABAP-FI常用BAPI
    FB01与F-02的区别(转载)
    SAP应用创新-维护控制表、视图统一路径
    FI 业务
    SAP 财务模块 FI-TV 差旅管理
  • 原文地址:https://www.cnblogs.com/XYZinc/p/7395581.html
Copyright © 2020-2023  润新知