Loading

2024-4-4 分块补题

P3203 [HNOI2010] 弹飞绵羊

记录每个位置跳出当前块所需要的步数和跳出的位置。
从后往前统计

#include<bits/stdc++.h> 
#define maxn 200100

using namespace std;

int n,m,len;
int pos[maxn],k[maxn];
int nxt[maxn],stp[maxn];
struct fk{int l,r;}a[maxn]; 

int read(){
	int s=0,w=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') s=(s<<1)+(s<<3)+ch-'0',ch=getchar();
	return s*w;
}

void init(){
	len=sqrt(n);
	for(int i=0;i<n;i++) pos[i]=i/len;
	for(int i=0;i<=pos[n-1];i++){
		a[i].l=i*len;
		a[i].r=(i+1)*len-1;
	}
	a[pos[n-1]].r=n-1;
}

void work(int l,int r){
	for(int i=r;i>=l;i--){
        if(i+k[i]>a[pos[i]].r){
            nxt[i]=i+k[i];
            stp[i]=1;
        } 
		else{
            nxt[i]=nxt[i+k[i]];
            stp[i]=stp[i+k[i]]+1;
        }
    }
}

int main(){
	n=read();
	for(int i=0;i<n;i++) k[i]=read();
	init();work(0,n-1);m=read();
	for(int i=1,opt,x,y,ans,p;i<=m;i++){
		opt=read();x=read();
		if(opt==1){
			p=x,ans=0;
			while(p<n) ans+=stp[p],p=nxt[p];
			cout<<ans<<endl;
		}
		else{
			y=read();k[x]=y;
			work(a[pos[x]].l,a[pos[x]].r);
		}
	}
	return 0;
}

P4168 [Violet] 蒲公英

存下每种颜色出现的位置,处理块与块中的众数。
注意离散化。
计数时,中间的块直接记录,两边零散位置暴力扫。

#include<bits/stdc++.h>
#define maxn 100010
using namespace std;

int n,id,l,r,sum,res,m,las,o;
int a[maxn],num[maxn],pos[maxn];
int cnt[maxn],f[3010][3010],b[maxn];
vector<int>l1[maxn];
map<int,int>mp;

int read(){
	int s=0,w=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') s=(s<<1)+(s<<3)+ch-'0',ch=getchar();
	return s*w;
}

int getans(int ll,int rr,int x){
	return upper_bound(l1[x].begin(),l1[x].end(),rr)-lower_bound(l1[x].begin(),l1[x].end(),ll);
}

void init(int x){
	memset(cnt,0,sizeof(cnt));
	int maxx=0,num1=0;
	for(int i=(x-1)*m+1;i<=n;i++){
		cnt[a[i]]++;
		if(cnt[a[i]]>maxx||(cnt[a[i]]==maxx&&a[i]<num1))
			maxx=cnt[a[i]],num1=a[i]; 
		f[x][pos[i]]=num1;
	}
}

int ask(int l1,int r1){
	int maxx=0,num1=0;
	if(pos[l1]+1<pos[r1])
		maxx=getans(l1,r1,f[pos[l1]+1][pos[r1]-1]),num1=f[pos[l1]+1][pos[r1]-1]; 
	for(int i=l1;i<=min(r1,pos[l1]*m);i++) {
		res=getans(l1,r1,a[i]);
		if(res>maxx||(res==maxx&&a[i]<num1))
			maxx=res,num1=a[i];
	}
	if(pos[l1]!=pos[r1]){
		for(int i=(pos[r1]-1)*m+1;i<=r1;i++){
			res=getans(l1,r1,a[i]);
			if(res>maxx||(res==maxx&&a[i]<num1))
				maxx=res,num1=a[i];
		}
	}
	return num[num1];
}
int main(){
	n=read();o=read();
	for(int i=1;i<=n;i++) a[i]=read(),b[i]=a[i];
	sort(b+1,b+n+1);
	for(int i=1;i<=n;i++) if(!mp[b[i]])
		id++,mp[b[i]]=id,num[id]=b[i];
	for(int i=1;i<=n;i++)
		a[i]=mp[a[i]],l1[a[i]].push_back(i); 
	for(int i=1;i<=id;i++) l1[i].push_back(n+1);
	m=sqrt(n);
	for(int i=1;i<=n;i++) pos[i]=(i-1)/m+1;
	sum=pos[n];
	for(int i=1;i<=sum;i++) init(i);
	for(int i=1;i<=o;i++){
		l=read();r=read();
		l=(l+las-1)%n+1,r=(r+las-1)%n+1;
		if(l>r) swap(l,r);las=ask(l,r);
		cout<<las<<endl;
	}
	return 0;
}
posted @   KnightL  阅读(15)  评论(0编辑  收藏  举报
努力加载评论中...
  1. 1 钢铁丛林 (LIVE版) GAI周延 / 杨和苏KeyNG
  2. 2 冠军相 黄旭 / 杨和苏KeyNG
  3. 3 活死人2022没有Cypher 活死人 / 龙崎 / 隆历奇 / JarStick / 李毅杰PISSY / 小精灵 / 杨和苏KeyNG / 喉结蜥蜴 / 法老
  4. 4 了不起 杨和苏KeyNG
  5. 5 赚大钱 杨和苏KeyNG / 龙崎
  6. 6 一千公里 杨和苏KeyNG / SHARK卫彬月
  7. 7 Straight to Hell 杨和苏KeyNG
  8. 8 惯犯 杨和苏KeyNG / step.jad依加
  9. 9 威武 杨和苏KeyNG
  10. 10 终章 杨和苏KeyNG
  11. 11 最后的狂欢 (Live) 杨和苏KeyNG
  12. 12 吹又生 杨和苏KeyNG
  13. 13 王位 杨和苏KeyNG
  14. 14 无名 (LIVE版) 杨和苏KeyNG
  15. 15 翻身仗 杨和苏KeyNG / 早安
  16. 16 午夜派对 杨和苏KeyNG
  17. 17 国王与法老 杨和苏KeyNG / 法老 / 张馨月
  18. 18 双手合十 杨和苏KeyNG
  19. 19 GOD 杨和苏KeyNG / AR刘夫阳 / 谢帝
  20. 20 路西法 杨和苏KeyNG
  21. 21 健康GANGGANG [feat. 杨和苏] (Remix) 谢帝 / 杨和苏KeyNG
  22. 22 十五.五十 杨和苏KeyNG
  23. 23 豫盖弥章 杨和苏KeyNG / 张馨月
  24. 24 阴暗面 杨和苏KeyNG
  25. 25 大反派 杨和苏KeyNG
  26. 26 很久很久 杨和苏KeyNG
  27. 27 声名大燥 杨和苏KeyNG / 徐梦圆
  28. 28 小丑女 杨和苏KeyNG
  29. 29 让我快乐 杨和苏KeyNG
  30. 30 半厘米 LOKEY低调组合 / 魏晨 / 王晓夫 / KAII
  31. 31 双人座 LOKEY低调组合
  32. 32 I Have A Dream LOKEY低调组合
  33. 33 终点起点 LOKEY低调组合
  34. 34 "她" 杨和苏KeyNG
  35. 35 R!CH (《中国有嘻哈》主题曲) 杨和苏KeyNG / 张馨月
  36. 36 命不由天 杨和苏KeyNG
  37. 37 决不投降 杨和苏KeyNG
  38. 38 兔八哥 杨和苏KeyNG
  39. 39 Sleep, Read, Love 杨和苏KeyNG
  40. 40 Pray for you 杨和苏KeyNG
  41. 41 心跳 (Live) 于文文 / 杨和苏KeyNG
  42. 42 Don't Diss 杨和苏KeyNG
  43. 43 逆流 (Live) 杨和苏KeyNG / Lil Boo
  44. 44 最后的狂欢 杨和苏KeyNG
  45. 45 吹又生 杨和苏KeyNG
  46. 46 都走了 杨和苏KeyNG / 张馨月
  47. 47 鱼和熊掌 杨和苏KeyNG
  48. 48 My Resume 杨和苏KeyNG / 杨晓川
  49. 49 加冕 杨和苏KeyNG
  50. 50 Who's Real 杨和苏KeyNG
  51. 51 最初的时候 杨和苏KeyNG / 张馨月
活死人2022没有Cypher - 活死人 / 龙崎 / 隆历奇 / JarStick / 李毅杰PISSY / 小精灵 / 杨和苏KeyNG / 喉结蜥蜴 / 法老
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Loading

点击右上角即可分享
微信分享提示