(线段树)湖南省第八届ACM省赛 RMQ with Shifts
来源:互联网 发布:php获取post json数据 编辑:程序博客网 时间:2024/05/17 20:01
RMQ with Shifts
题意:这题题意还是比较简单,主要有两种操作:
1.query一个闭区间的最小值;
2.将一组数据左移一次!直接更新叶子节点的值即可(字符串长度最多为30,故更新操作最多不超过12次)!
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <stack>#include <cmath>#include <vector>#include <queue>#include <map>#include <set>using namespace std;#define LL long long#define M 100005#define DEBUG puts("It's here!")#define INF 1<<29#define kind 30#define CLS(x,v) memset(x,v,sizeof(x))#define FOR(i,a,n) for(int i=(a);i<=(n);++i)struct node{ int l,r,minn; node*lef,*rig;} q[M<<1];int n,a[M],cnt;char s[50];int ans,data[30];//建立线段树void BuildSeg(node *p,int l,int r){ p->l=l; p->r=r; if(l==r)p->minn=a[l]; if(l<r) { p->lef=q+cnt; cnt++; BuildSeg(p->lef,l,(l+r)>>1); p->rig=q+cnt; cnt++; BuildSeg(p->rig,(l+r)/2+1,r); p->minn=min(p->lef->minn,p->rig->minn); }}void query(node *p,int l,int r){ if(p->l==l&&p->r==r) { ans=min(ans, p->minn); return ; } if(r<=(p->l+p->r)/2) query(p->lef,l,r); else if(l>(p->l+p->r)/2) query(p->rig,l,r); else { query(p->lef,l,(p->l+p->r)/2); query(p->rig,(p->l+p->r)/2+1,r); }}void update(node *p,int x){ p->minn=INF; if(p->l==x&&p->r==x) { p->minn=a[x]; return ; } if(x<=(p->l+p->r)/2)update(p->lef,x); else update(p->rig,x); p->minn=min(p->lef->minn,p->rig->minn);}void deal(){ int k=0; data[0]=0; for(int i=5;s[i];i++) if(s[i]>'0'&&s[i]<='9') { k=++data[0]; data[k]=0; while(s[i]>='0'&&s[i]<='9') { data[k]=data[k]*10+(s[i]-'0'); i++; } }}int main(){ int k; char c; while(~scanf("%d%d",&n,&k)) { for(int i=1; i<=n; i++) scanf("%d",a+i); node *root=q; cnt=1; BuildSeg(root,1,n); while(k--) { scanf("%s",s); deal(); if(s[0]=='q') { ans=INF; query(root,data[1],data[2]); printf("%d\n",ans); } else if(s[0]=='s') { for(int i=1;i<data[0];i++) { swap(a[data[i]],a[data[i+1]]); update(root,data[i]); } update(root,data[data[0]]); } } } return 0;}
0 0
- (线段树)湖南省第八届ACM省赛 RMQ with Shifts
- 湖南省第七届大学生计算机程序设计竞赛 RMQ with Shifts (线段树)
- 湖南省赛七 RMQ with Shifts 裸的线段树
- UVA12299 - RMQ with Shifts(线段树)
- 2011ACM湖南省省赛K题 RMQ with Shifts
- 20140820 【第七届湖南省省赛】 RMQ with Shifts
- 湖南省第七届程序设计竞赛 RMQ with Shifts
- UVA 12299 RMQ with Shifts(线段树)
- UVa 12299 - RMQ with Shifts (简单线段树)
- 【UVA】12299-RMQ with Shifts(线段树)
- uva 12299 RMQ with Shifts (简单线段树)
- UVA 12299 RMQ with Shifts(线段树)
- UVA - 12299 RMQ with Shifts 线段树(点修改)
- csu 1110 RMQ with Shifts(线段树) 解题报告
- UVA 12299 RMQ with Shifts(线段树+点更新)
- UVA 12299 - RMQ with Shifts 线段树
- RMQ with Shifts 线段树基基础
- RMQ with Shifts 线段树+点修改
- Linux Support for ARM LPAE
- 程序猿媳妇儿注意事项
- (广度搜索)A - Prime Path(11.1.1)
- win7 64位系统中mysql免安装版配置
- epoll使用详解(精髓)
- (线段树)湖南省第八届ACM省赛 RMQ with Shifts
- poj2096 期望
- POJ 3358 (欧拉定理)
- 项目管理模式之如何去除SVN标记
- java类加载机制
- UIView属性clipsTobounds的应用
- 命令模式
- poj Play on Words(1386)
- 字符,字节和编码