zoukankan      html  css  js  c++  java
  • CF86D Powerful array

    CF86D Powerful array

    数据范围 2e5 ,可以带根号的算法,同时没有要求强制在线,于是可以考虑莫队。

    我们把每次单点变化的贡献写出来就可以直接维护了。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    template <typename T>
    inline void read(T &x){
    	x=0;char ch=getchar();bool f=false;
    	while(!isdigit(ch)){if(ch=='-'){f=true;}ch=getchar();}
    	while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    	x=f?-x:x;
    	return ;
    }
    template <typename T>
    inline void write(T x){
    	if(x<0) putchar('-'),x=-x;
    	if(x>9) write(x/10);
    	putchar(x%10^48);
    	return ;
    }
    const int N=2e5+5,M=1e6+5;
    #define ll long long
    int n,m;
    int bl[N];
    ll cnt[M],a[N],Ans[N];
    struct Query{int l,r,id;}Q[N];
    ll Now;
    inline void Add(int x){
    	Now+=2*cnt[a[x]]*a[x]+a[x];
    	cnt[a[x]]++;
    	return ;
    }
    inline void Del(int x){
    	Now+=-2*cnt[a[x]]*a[x]+a[x];
    	cnt[a[x]]--;
    	return ;
    }
    inline bool Cmp(Query x,Query y){return bl[x.l]^bl[y.l]?bl[x.l]<bl[y.l]:bl[x.l]&1?x.r<y.r:x.r>y.r;}
    int main(){
    	read(n),read(m);
    	for(int i=1;i<=n;i++) read(a[i]);
    	const int t=sqrt(m);
    	for(int i=1;i<=m;i++){
    		read(Q[i].l),read(Q[i].r),Q[i].id=i;
    		bl[i]=(i-1)/t+1;
    	}
    	sort(Q+1,Q+m+1,Cmp);
    	int l=1,r=1;cnt[a[1]]++,Now=a[1];
    	for(int i=1;i<=m;i++){
    		while(l>Q[i].l) Add(--l);
    		while(r<Q[i].r) Add(++r);
    		while(l<Q[i].l) Del(l++);
    		while(r>Q[i].r) Del(r--);
    		Ans[Q[i].id]=Now;
    	}
    	for(int i=1;i<=m;i++) write(Ans[i]),putchar('
    ');
    	
    	return 0;
    } 
    
  • 相关阅读:
    nginx限速 原理
    规则引擎 图形界面
    阿里巴巴 规则引擎
    martinfowler Data Guide big data bad things
    Nginx Request URI too large
    linux2.6.30.4内核移植(1)
    根文件系统
    Linux内核配置:定制配置选项
    Linux内核配置:Kconfig
    Linux内核配置:Makefile目标
  • 原文地址:https://www.cnblogs.com/Akmaey/p/14683255.html
Copyright © 2011-2022 走看看