poj 3368
来源:互联网 发布:windows是什么语言 编辑:程序博客网 时间:2024/06/09 15:20
最近写的程序不是超时就是WA,而且都找不到原因,还好这道题是自己从超时里面优化出来的,尽管还是很慢啊!
题是利用离散化和线段树,别的不说了,看代码吧
#include<iostream>#include<cstdio>#include<string>#include<cmath>#include<algorithm>#include<queue>#include<stack>#include<vector>#include<climits>using namespace std;#define ll __int64#define rep(i,n) for(i=0; i<(n); i++) #define reph(i,n,m) for(i=(n); i<=(m); i++)//正循环的#define repd(i,n,m) for(i=(n); i>=(m); i--) //负循环的 #define fab(a) (a)>0?(a):0-(a)#define arc(a) (a)*(a)#define inf 10000000 //最大值的#define exp 0.0000001 //浮点型的#define N 100010int a[N],b[N];int len,sum;typedef struct tree{ int sum,l,r; } rr;tree node[N*17];void Maketree(int i,int l,int r){ node[i].l=l; node[i].r=r; if(l==r) { node[i].sum=b[len++];//记录总的数的 return ; } int mid=(l+r)/2; Maketree(2*i,l,mid); Maketree(2*i+1,mid+1,r); node[i].sum=max(node[2*i].sum,node[2*i+1].sum); }void find(int i,int l, int r){ if(l<=node[i].l && node[i].r<=r) { sum=max(sum,node[i].sum); return; } int mid=(node[i].l+node[i].r)/2; if(r<=mid) find(2*i,l,r); else if(l>mid) find(2*i+1,l,r); else { find(2*i,l,r); find(2*i+1,l,r); } } int fen(int l,int r,int x) { int mid; while(l<=r) { mid=(l+r)/2; if(x==b[mid]) return mid; if(b[mid]<x) l=mid+1; else r=mid-1; } return l; }int main(){ int n,m,i,j; while(scanf("%d",&n)) { if(n==0) break; scanf("%d",&m); reph(i,1,n) scanf("%d",&a[i]); len=1; b[1]=1; reph(i,2,n) if(a[i]==a[i-1]) b[len]++; else b[++len]=1; n=len;//用n记录数组的长度的 len=1; Maketree(1,1,n); reph(i,2,n) b[i]+=b[i-1]; int x,y; while(m--) { sum=0; scanf("%d%d",&x,&y); i=fen(1,n,x); j=fen(1,n,y); if(i==j) sum=y-x+1; else { sum=b[i]-x+1; sum=max(sum,y-b[j-1]); if(j>i+1) find(1,i+1,j-1); } printf("%d\n",sum); } } return 0;}
- poj 3368
- poj 3368
- poj 3368
- POJ-3368
- POJ 3368
- poj 3368
- poj 3368
- POJ 3368
- poj 3368
- POJ 3368
- poj 3368
- poj 3368
- POJ 3368 Frequent values
- poj 3368 Frequent values
- POJ 3368 Frequent Values
- poj 3368 Frequent values
- POJ 3368 RMQ - ST
- poj 3368(RMQ应用)
- MTK Android 编译命令
- 菜菜从零学习WCF十(序列化)
- 屏蔽优酷广告hosts文件设置
- 34 个使用 Raspberry Pi 的酷创意
- 不使用反射,“一行代码”实现Web、WinForm窗体表单数据的填充、收集、清除,和到数据库的CRUD
- poj 3368
- C#- 多个整数的输入
- 使用Bitsadmin 命令下载文件
- JavaScript 操作 Cookie
- 文本框中输入小写字母即时转换为大写
- 新的Layout布局系统
- ubuntu 12.04 安装 mariadb
- 不使用web服务实现文本框自动完成扩展
- 结构型模式之外观模式(Facade)