这是道好氧题??????

P2709 小B的询问

数据加强了,不吸氧跑得慢的莫队可以T10个点(
by _stellar @ 2019-04-06 10:46:49


@[MrWangnacl](/space/show?uid=83906) 这题我加了奇偶优化的莫队不吸氧全部T掉
by Andrew82 @ 2019-04-06 11:01:54


```cpp #include<bits/stdc++.h> using namespace std; #define loop(i,start,end) for(register int i=start;i<=end;++i) #define anti_loop(i,start,end) for(register int i=start;i>=end;--i) #define clean(arry,num) memset(arry,num,sizeof(arry)) #define max(a,b) ((a>b)?a:b) #define min(a,b) ((a<b)?a:b) #define ll long long template<typename T>void read(T &x){ x=0;char r=getchar();T neg=1; while(r>'9'||r<'0'){if(r=='-')neg=-1;r=getchar();} while(r>='0'&&r<='9'){x=(x<<1)+(x<<3)+r-'0';r=getchar();} x*=neg; } int n,m,k; const int maxn=50000+10; int c[maxn]; int a[maxn]; int block; struct question{ int l;int r;int block;int order; }Q[maxn]; int res[maxn]; inline bool cmp(question a,question b){ if((a.block==b.block))return a.r<b.r; else return a.l<b.l; } void write(int x){ if(x<0){putchar('-');x=-x;} if(x>9)write(x/10); putchar(x%10+'0'); } inline void ins(register int pos,register int &_sigma){ _sigma+=2*c[a[pos]]+1; ++c[a[pos]]; } inline void del(register int pos,register int &_sigma){ _sigma-=2*c[a[pos]]-1; --c[a[pos]]; } inline void mo(){ clean(c,0); register int l=1,r=1; ++c[a[l]]; register int sigma=c[a[l]]*c[a[l]]; loop(i,1,m){ while(l<Q[i].l)del(l++,sigma); while(l>Q[i].l)ins(--l,sigma); while(r>Q[i].r)del(r--,sigma); while(r<Q[i].r)ins(++r,sigma); res[Q[i].order]=sigma; } loop(i,1,m)write(res[i]),printf("\n"); } int main(){ #ifndef ONLINE_JUDGE freopen("datain.txt","r",stdin); freopen("dataout.txt","w",stdout); #endif read(n);read(m);read(k); clean(res,0);clean(a,0); block=sqrt(n); loop(i,1,n){ read(a[i]); } loop(i,1,m){ read(Q[i].l); read(Q[i].r); Q[i].order=i; Q[i].block=i/block+1; } sort(Q+1,Q+1+m,cmp); mo(); return 0; } ```
by Andrew82 @ 2019-04-06 11:02:51


@[Andrew82](/space/show?uid=109378) 这不是奇偶优化啊.. 不应该是这样的吗 ``` return (l/block)^(a.l/block) ? l < a.l : (((l/block)&1) ? r < a.r : r > a.r); ``` 还有分块大小最好改成$\texttt{n/sqrt(m*2/3)}$会快一点
by _stellar @ 2019-04-06 11:12:58


@[MrWangnacl](/space/show?uid=83906) 哦,我发错代码了,但是我现在发现问题并不在此处,是我手残。。。。 ``` Q[i].block=i/block+1; ```
by Andrew82 @ 2019-04-06 11:17:39


@[Andrew82](/space/show?uid=109378) ![](https://cdn.luogu.com.cn/upload/pic/54494.png )
by _stellar @ 2019-04-06 11:22:53


?我的莫队轻松过
by Suuon_Kanderu @ 2020-05-20 20:44:54


@[Andrew82](/user/109378) 草我发现我的也错在这
by Piwry @ 2020-05-25 15:03:13


|