zoukankan      html  css  js  c++  java
  • BZOJ5055: 膜*

    BIT随手维护一下,和LIS差不多,加了个wys排序暂时rk1。

    #include<algorithm>
    #include<cstdio>
    #include<sys/mman.h>
    struct ano{
    	char*s;
    	ano():s((char*)mmap(0,1<<22,1,2,0,0)){}
    	operator int(){
    		int x=0;
    		while(*s<48)++s;
    		while(*s>32)
    			x=x*10+*s++-48;
    		return x;
    	}
    }buf;
    using namespace std;
    typedef unsigned long long ll;
    const int p=19260817;
    const int N=3e5+5;
    int n,m,w[N];
    ll f[N][2];
    void inc(ll*c,int i,int d){
    	for(;i<=m;i+=i&-i)c[i]+=d;
    }
    ll ask(ll*c,int i){
    	ll s=0;
    	for(;i;i^=i&-i)s+=c[i];
    	return s;
    }
    int c7[256],g[N];
    struct vec{int w,i;}t[N],c8[N];
    void ssort(){
    	vec*a=t,*b=c8;
    	for(int k=0;k<32;k+=8){
    		fill_n(c7,256,0);
    		for(int i=0;i<n;++i)
    			++c7[a[i].w>>k&255];
    		for(int i=1;i<256;++i)
    			c7[i]+=c7[i-1];
    		for(int i=n-1;~i;--i)
    			b[--c7[a[i].w>>k&255]]=a[i];
    		swap(a,b);
    	}
    }
    int main(){
    	n=buf;
    	for(int i=0;i<n;++i)
    		w[i]=buf,t[i]={w[i],i};
    	ssort();
    	for(int i=0;i<n;++i)
    		g[t[i].i]=i&&t[i].w==t[i-1].w?m:++m;
    	ll s=0;
    	for(int i=0;i<n;++i){
    		ll a=0,b=0;
    		for(int k=g[i]-1;k;k^=k&-k){
    			a+=f[k][0];
    			b+=f[k][1];
    		}
    		a=a%p*w[i]%p;
    		s+=b%p*w[i]%p;
    		for(int k=g[i];k<=m;k+=k&-k){
    			f[k][0]+=w[i];
    			f[k][1]+=a;
    		}
    	}
    	printf("%lld
    ",s%p);
    }
    

    天才麻将少女的漫画真好看。

  • 相关阅读:
    Codeforces Global Round 6
    Codeforces Global Round 5
    笔记
    笔记
    Codeforces Round #608 (Div. 2)
    模板
    Codeforces Round #607 (Div. 2)
    find命令
    while循环脚本
    发邮件
  • 原文地址:https://www.cnblogs.com/f321dd/p/7609203.html
Copyright © 2011-2022 走看看