zoukankan      html  css  js  c++  java
  • 【bzoj2038】小Z的袜子

    莫队算法是一种针对询问进行分块的离线算法,如果已知区间 [ l , r ] 内的答案,并且可以在较快的时间内统计出区间 [ l-1, r ],[ l , r+1 ] 的答案,即可使用莫队算法。
    莫队复杂度证明如下:
    假设有 (O(sqrt n)) 个询问在不同块(块与块的间隔处)中,有 (O(sqrt n)) 个询问在同一个块中。

    1. 在同一个块中的所有询问,询问结束之后 l 至多移动 (O(sqrt n)) 次,而 r 至多移动 (O(n)) 次,一共有 (O(sqrt n)) 个块,因此这部分时间复杂度为(O(nsqrt n))
    2. 若 q[i] 与 q[i+1] 在不同(相邻)块中,则询问之间的 l 至多移动 (2O(sqrt n)) 次,而 r 至多移动 (O(n)) 次,一共有 (O(sqrt n)) 个这样的询问,因此这部分时间复杂度也为(O(nsqrt n))
    3. 综上所述,时间复杂度为(O(nsqrt n))

    代码如下

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=5e4+10;
    
    struct node{int l,r,id,b;}q[maxn];
    int n,m,size,cnt[maxn],a[maxn];
    long long ans1[maxn],ans2[maxn];
    
    bool cmp(const node& x,const node& y){return x.b==y.b?x.r<y.r:x.b<y.b;}
    
    void read_and_parse(){
    	scanf("%d%d",&n,&m);
    	size=(int)sqrt(n);
    	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    	for(int i=1;i<=m;i++){
    		scanf("%d%d",&q[i].l,&q[i].r);
    		q[i].b=(q[i].l-1)/size+1;
    		q[i].id=i; 
    	}
    	sort(q+1,q+m+1,cmp);
    }
    
    long long gcd(long long x,long long y){return y?gcd(y,x%y):x;}
    
    void solve(){
    	for(int i=1,lp=1,rp=0,now=0;i<=m;i++){
    		while(lp<q[i].l)now-=2*cnt[a[lp]]-2,--cnt[a[lp]],++lp;
    		while(rp>q[i].r)now-=2*cnt[a[rp]]-2,--cnt[a[rp]],--rp;
    		while(lp>q[i].l)--lp,now+=2*cnt[a[lp]],++cnt[a[lp]];
    		while(rp<q[i].r)++rp,now+=2*cnt[a[rp]],++cnt[a[rp]];
    		if(q[i].l^q[i].r)ans1[q[i].id]=(long long)now,ans2[q[i].id]=(long long)(q[i].r-q[i].l+1)*(q[i].r-q[i].l);
    		else ans1[q[i].id]=0,ans2[q[i].id]=1;
    	}
    	long long com;
    	for(int i=1;i<=m;i++)com=gcd(ans1[i],ans2[i]),printf("%lld/%lld
    ",ans1[i]/com,ans2[i]/com);
    }
    
    int main(){
    	read_and_parse();
    	solve();
    	return 0;
    }
    
  • 相关阅读:
    Dobbo介绍
    Java反射
    Rocket MQ简介
    logback异步日志
    Java Arrays.asList
    图解Javascript——作用域、作用域链、闭包
    android源码-安卓源码-Android源码下载-安卓游戏源码
    Ghost版Win8.1系统企业版下载
    3dmax详细讲解全套攻略在线视频教程
    网站分析师如何让分析报告更具价值
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/9897161.html
Copyright © 2011-2022 走看看