博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3368_2
阅读量:5143 次
发布时间:2019-06-13

本文共 1610 字,大约阅读时间需要 5 分钟。

线段树

代码:

#include
#include
using namespace std;int n,m;struct e{ int l,r,max,maxl,maxr;};e tree[300001];int b[100001];void build(int s,int t,int p){ int i,j,k; tree[p].l=s; tree[p].r=t; if(s==t) { tree[p].max=tree[p].maxl=tree[p].maxr=1; return; } k=(s+t)>>1; build(s,k,p*2); build(k+1,t,p*2+1); tree[p].maxl=tree[2*p].maxl; if(tree[2*p].maxl==k-s+1&&b[k]==b[k+1]) tree[p].maxl+=tree[2*p+1].maxl; tree[p].maxr=tree[2*p+1].maxr; if(tree[2*p+1].maxr==t-k&&b[k]==b[k+1]) tree[p].maxr+=tree[2*p].maxr; i=0; if(b[k]==b[k+1]) i=tree[2*p].maxr+tree[2*p+1].maxl; j=max(tree[2*p].max,tree[2*p+1].max); tree[p].max=max(i,j);}void find(int s,int t ,int p,int &x,int &y,int &sum){ if(s<=tree[p].l&&tree[p].r<=t) { x=tree[p].maxl; y=tree[p].maxr; sum=tree[p].max; return; } if(t<=tree[2*p].r) find(s,t,p*2,x,y,sum); else if(s>=tree[2*p+1].l) find(s,t,2*p+1,x,y,sum); else { int i,j,k,i1,j1,k1; find(s,t,2*p,i1,j1,k1); find(s,t,2*p+1,i,j,k); int mid=tree[2*p].r; x=i1; if(b[mid]==b[mid+1]&&i1==mid-max(s,tree[p].l)+1) x+=i; y=j; if(b[mid]==b[mid+1]&&j==min(t,tree[p].r)-mid) y+=j1; sum=0; sum=max(k1,k); if(b[mid]==b[mid+1]) sum=max(sum,j1+i); }}void read(){// ifstream cin("in.txt"); int i,j,k,s,t,x,y,sum; while(scanf("%d",&n)!=EOF) { if(n==0) return; scanf("%d",&m); //cin>>m; for(i=1;i<=n;i++) scanf("%d",&b[i]); //cin>>b[i]; build(1,n,1); for(i=1;i<=m;i++) { //cin>>s>>t; scanf("%d%d",&s,&t); find(s,t,1,x,y,sum); cout<
<

转载于:https://www.cnblogs.com/zhaozhe/archive/2011/05/16/2047410.html

你可能感兴趣的文章
《经济地理与企业兴衰》学习笔记
查看>>
正确 C# 未来的期望
查看>>
【UVA】434-Matty&#39;s Blocks
查看>>
五、宽度优先搜索(BFS)
查看>>
运行一个窗体直接最大化并把窗体右上角的最大化最小化置灰
查看>>
Android开发技术周报 Issue#80
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
WebForm——IIS服务器、开发方式和简单基础
查看>>
小实验3:实现haproxy的增、删、查
查看>>
Angular中ngModel的$render的详解
查看>>
读《格局》| 未到年纪的真理
查看>>
[转]《城南旧事》里的《送别》
查看>>
07动手动脑
查看>>
django知识点总结
查看>>
C++ STL stack、queue和vector的使用
查看>>
第二章读书笔记
查看>>
redis-cluster
查看>>
linux yum配置
查看>>
ASP.NET_ASP.NET 缓存Cache
查看>>
js预载入 new Image对象
查看>>