线段树,没了..

-----------------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cctype>
  
#define rep(i,n) for(int i=0;i<n;i++)
#define clr(x,c) memset(x,c,sizeof(x))
#define Rep(i,l,r) for(int i=l;i<=r;i++)
  
using namespace std;
  
const int inf=0x7fffffff;
const int maxn=100005;
  
int a[maxn];
int minv[1<<18];
  
void build(int o,int l,int r) {
int m=l+(r-l)/2;
if(l==r) minv[o]=a[l];
else {
build(o*2,l,m);
build(o*2+1,m+1,r);
minv[o]=min(minv[o*2],minv[o*2+1]);
}
}
  
int p,v;
void update(int o,int l,int r) {
int m=l+(r-l)/2;
if(l==r) minv[o]=v;
else {
p<=m ? update(o*2,l,m) : update(o*2+1,m+1,r);
minv[o]=min(minv[o*2],minv[o*2+1]);
}
}
  
int ql,qr;
int query(int o,int l,int r) {
int m=l+(r-l)/2,ans=inf;
if(ql<=l && qr>=r) return minv[o];
if(ql<=m) ans=min(ans,query(o*2,l,m));
if(qr>m) ans=min(ans,query(o*2+1,m+1,r));
return ans;
}
int main()
{
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
int n,q;
scanf("%d%d",&n,&q);
Rep(i,1,n) scanf("%d",&a[i]);
build(1,1,n);
int cmd[20],change[20],cnt;
char s[100];
while(q--) {
scanf("%s",s);
int len=strlen(s);
cmd[cnt=0]=0;
for(int i=6;i<len;++i)
if(isdigit(s[i])) (cmd[cnt]*=10)+=s[i]-'0';
else cmd[++cnt]=0;
if(s[0]=='q') {
ql=cmd[0],qr=cmd[1];
printf("%d\n",query(1,1,n));
} else {
rep(i,cnt) change[i]=a[cmd[i]];
rep(i,cnt) { v=a[p=cmd[i]]=change[(i+1)%cnt]; update(1,1,n); }
}
}
return 0;
}

-----------------------------------------------------------------------------------------

12299 RMQ with Shifts
In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each
query (L, R) (L ≤ R), we report the minimum value among A[L], A[L + 1], …, A[R]. Note that the
indices start from 1, i.e. the left-most element is A[1].
In this problem, the array A is no longer static: we need to support another operation
shif t(i1, i2, i3, . . . , ik)(i1 < i2 < . . . < ik, k > 1)
we do a left “circular shift” of A[i1], A[i2], …, A[ik].
For example, if A={6, 2, 4, 8, 5, 1, 4}, then shif t(2, 4, 5, 7) yields {6, 8, 4, 5, 4, 1, 2}. After that,
shif t(1, 2) yields 8, 6, 4, 5, 4, 1, 2.
Input
There will be only one test case, beginning with two integers n, q (1 ≤ n ≤ 100, 000, 1 ≤ q ≤ 250, 000),
the number of integers in array A, and the number of operations. The next line contains n positive
integers not greater than 100,000, the initial elements in array A. Each of the next q lines contains an
operation. Each operation is formatted as a string having no more than 30 characters, with no space
characters inside. All operations are guaranteed to be valid.
Warning: The dataset is large, better to use faster I/O methods.
Output
For each query, print the minimum value (rather than index) in the requested range.
Sample Input
7 5
6 2 4 8 5 1 4
query(3,7)
shift(2,4,5,7)
query(1,4)
shift(1,2)
query(2,2)
Sample Output
1
4
6

UVa 12299 RMQ with Shifts(线段树)的更多相关文章

  1. UVa 12299 RMQ with Shifts(移位RMQ)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: "Times New ...

  2. HDU 1754 - I Hate It & UVA 12299 - RMQ with Shifts - [单点/区间修改、区间查询线段树]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 Time Limit: 9000/3000 MS (Java/Others) Memory Li ...

  3. RMQ with Shifts(线段树)

    RMQ with Shifts Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u Pra ...

  4. TZOJ 4325 RMQ with Shifts(线段树查询最小,暴力更新)

    描述 In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each que ...

  5. TOJ 4325 RMQ with Shifts / 线段树单点更新

    RMQ with Shifts 时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte 描述 In the traditional RMQ (Range M ...

  6. UVA 12299 RMQ with shifts

    就是线段树的单点修改和区间查询. 然而输入打了一个小时才弄清楚. #include<iostream> #include<cstdio> #include<cstring ...

  7. UVA 12299 RMQ with Shifts(线段树:单点更新)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  8. RMQ问题(线段树+ST算法)

    转载自:http://kmplayer.iteye.com/blog/575725 RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ ...

  9. UVA 11983 Weird Advertisement(线段树求矩形并的面积)

    UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...

随机推荐

  1. Day1_PHP快速入门

    本人知识背景:行业软件C/C++开发两年经验,了解PHP, 所以学习日志偏向记录PHP相对于C的特性 测试环境:EasyPHP13.1 Day 1 学习时间:3小时 1. HTML触发PHP HTML ...

  2. padding-bottom布局解析;

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Android自定义Activity酷炫的动画跳转效果

    两个Activity跳转的时候,自定义翻页效果: Intent intent = new Intent(FirstActivity.this, SecondActivity.class);   sta ...

  4. 采用proguard困惑android代码

    当前是有些工具比方apktool,dextojar等是能够对我们android安装包进行反编译.获得源代码的.为了降低被别人破解,导致源代码泄露,程序被别人盗代替码,等等.我们须要对代码进行混淆.an ...

  5. JS 严格模式

    标志 "use strict"; //老版本浏览器会自动忽略 调用 //整个文件调用 (function(){ "use strict"; })(); //单个 ...

  6. JavaScript之共享onload

    我们知道,当我们将JS代码脚本放到<head></head>标签之间时,这是的js代码加载要先于DOM加载,而我们往往会在JS代码脚本中写一些获取DOM元素的代码,而此时的DO ...

  7. SQLServer .mdf和.ldf文件

    .mdf:是数据库数据文件,存放一个数据库的数据信息. .ldf:是数据库日志文件,即日常对数据库的操作的记录如(增.删.改)的文件.

  8. VIM中格式化json

    在vim输入以下命令就可以格式化:%!python -m json.tool可以在~/.vimrc增加快捷键map <F4><Esc>:%!python -m json.too ...

  9. Tomcat使用startup启动,一闪而过,如何查看出错信息

    解决办法:打开startup.bat,通过使用run命令在原有启动窗口显示出错信息. 在startup.bat中找到:call "%EXECUTABLE%" start %CMD_ ...

  10. ASP.NET MVC 音乐商店 - 目录

    这一个系列的内容来自微软的音乐商店 Music Store, 这是项目在 Codeplex 上的地址:http://mvcmusicstore.codeplex.com/. 这个项目使用 ASP.NE ...