[bzoj2724]蒲公英
2016-03-13 22:00
232 查看
题目大意
在线兹瓷区间求众数经典分块
预处理ans[i,j]和sum[i,j]不用说了,不知道的请戳根号算法题库#include<cstdio> #include<algorithm> #include<cmath> #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; typedef long long ll; const int maxn=100000+10,maxc=300; int ans[maxc][maxc],sum[maxn][maxc],cnt[maxn],a[maxn],b[maxn],belong[maxn]; int i,j,k,l,r,t,n,m,c,now; int main(){ freopen("2724.in","r",stdin);freopen("2724.out","w",stdout); scanf("%d%d",&n,&m); c=floor(sqrt(n))+1; fo(i,1,n) scanf("%d",&a[i]),belong[i]=(i-1)/c+1,b[i]=a[i]; sort(b+1,b+n+1); l=unique(b+1,b+n+1)-b-1; fo(i,1,n) a[i]=lower_bound(b+1,b+l+1,a[i])-b; fo(i,1,belong ){ now=0; fo(j,(i-1)*c+1,n){ cnt[a[j]]++; if (!now||cnt[a[j]]>cnt[now]||cnt[a[j]]==cnt[now]&&a[j]<now) now=a[j]; ans[i][belong[j]]=now; } fo(j,(i-1)*c+1,n) if (cnt[a[j]]) cnt[a[j]]=0; } fo(i,1,n) sum[a[i]][belong[i]]++; fo(i,1,l) fo(j,1,belong ) sum[i][j]+=sum[i][j-1]; now=0; while (m--){ scanf("%d%d",&j,&k); j=(ll)(j+now-1)%n+1;k=(ll)(k+now-1)%n+1; if (j>k) swap(j,k); l=belong[j];r=belong[k]; if (r-l<=1){ now=0; fo(i,j,k){ cnt[a[i]]++; if (!now||cnt[a[i]]>cnt[now]||cnt[a[i]]==cnt[now]&&a[i]<now) now=a[i]; } fo(i,j,k) if (cnt[a[i]]) cnt[a[i]]=0; now=b[now]; printf("%d\n",now); continue; } now=ans[l+1][r-1]; fo(i,j,l*c){ cnt[a[i]]++; if (!now||cnt[a[i]]+sum[a[i]][r-1]-sum[a[i]][l]>cnt[now]+sum[now][r-1]-sum[now][l]||cnt[a[i]]+sum[a[i]][r-1]-sum[a[i]][l]==cnt[now]+sum[now][r-1]-sum[now][l]&&a[i]<now) now=a[i]; } fo(i,(r-1)*c+1,k){ cnt[a[i]]++; if (!now||cnt[a[i]]+sum[a[i]][r-1]-sum[a[i]][l]>cnt[now]+sum[now][r-1]-sum[now][l]||cnt[a[i]]+sum[a[i]][r-1]-sum[a[i]][l]==cnt[now]+sum[now][r-1]-sum[now][l]&&a[i]<now) now=a[i]; } fo(i,j,l*c) if (cnt[a[i]]) cnt[a[i]]=0; fo(i,(r-1)*c+1,k) if (cnt[a[i]]) cnt[a[i]]=0; now=b[now]; printf("%d\n",now); } }
相关文章推荐
- tomcat构建及session保持
- 不设置尾指针的链表作为链队列的存储结构
- 内联函数
- ActivityMQ android开发
- 实现栈的逆序 递归 不申请额外的数据结构
- win10Java 环境配置
- 20145337 《Java程序设计》第二周学习总结
- EL表达式
- uva10330 (最大流 & 超级源点汇点的构建 & EK算法)
- hdu 3642 Get The Treasury (三维的扫描线)
- 第三周机电作业
- 20145223《Java程序程序设计》第2周学习总结
- LeetCode:103Binary Tree Zigzag Level Order Traversal
- C-C++中#define的主要用途
- C#学习之接口
- Java nio初步了解
- 初识mina
- Redis源码解析:09redis数据库实现(键值对操作、键超时功能、键空间通知)
- 线性结构
- PHP学习笔记(2)