poj 4090:超级备忘录
来源:互联网 发布:ios必备软件 编辑:程序博客网 时间:2024/06/05 04:24
poj 4090:超级备忘录
你的朋友Jackson被邀请参加一个叫做“超级备忘录”的电视节目。在这个节目中,参与者需要玩一个记忆游戏。在一开始,主持人会告诉所有参与者一个数列,{A1, A2, ..., An}。接下来,主持人会在数列上做一些操作,操作包括以下几种:
ADD x y D:给子序列{Ax, ..., Ay}统一加上一个数D。例如,在{1, 2, 3, 4, 5}上进行操作"ADD 2 4 1"会得到{1, 3, 4, 5, 5}。
REVERSE x y:将子序列{Ax, ..., Ay}逆序排布。例如,在{1, 2, 3, 4, 5}上进行操作"REVERSE 2 4"会得到{1, 4, 3, 2, 5}。
REVOLVE x y T:将子序列{Ax, ..., Ay}轮换T次。例如,在{1, 2, 3, 4, 5}上进行操作"REVOLVE 2 4 2"会得到{1, 3, 4, 2, 5}。
INSERT x P:在Ax后面插入P。例如,在{1, 2, 3, 4, 5}上进行操作"INSERT 2 4"会得到{1, 2, 4, 3, 4, 5}。
DELETE x:删除Ax。在Ax后面插入P。例如,在{1, 2, 3, 4, 5}上进行操作"DELETE 2"会得到{1, 3, 4, 5}。
MIN x y:查询子序列{Ax, ..., Ay}中的最小值。例如,{1, 2, 3, 4, 5}上执行"MIN 2 4"的正确答案为2。
为了使得节目更加好看,每个参赛人都有机会在觉得困难时打电话请求场外观众的帮助。你的任务是看这个电视节目,然后写一个程序对于每一个询问计算出结果,这样可以使得Jackson在任何时候打电话求助你的时候,你都可以给出正确答案。
接下来n行给出了序列中的数。
接下来一行包含一个数M (M ≤ 100000),描述操作和询问的数量。
接下来M行给出了所有的操作和询问。
#include <iostream>using namespace std;class intList{int * data;int length;public:intList(){data = NULL;length = 0;}void add( int x,int y,int D ){for( int i=x;i<=y;i++ ){data[i-1] += D;}}void reverse( int x,int y ){for(int i = 0; i < (y-x+1)/2 ; i++){int d = data[x+i-1];data[x+i-1] = data[y-i-1];data[y-i-1] = d;}}void revolve(int x,int y,int T){int len = y - x + 1;int m = T<(len-T)? T:(len - T);T = T % len;if( T != 0 )if( len % m == 0 ){for(int i=0;i<m;i++){int flag = i;int flag_data = data[i+x-1];int j = i ;while ( (j+T)%len != flag ){int d = data[(j+T)%len + x-1];data[(j+T)%len + x-1] = flag_data ;flag_data = d;j = (j+T)%len ;}data[flag+x-1] = flag_data;}}else{int flag = 0;int flag_data = data[flag+x-1];int j = 0;while( (j+T)%len != flag ){int d = data[(j+T)%len + x-1] ;data[(j+T)%len + x-1] = flag_data ;flag_data = d ;j = (j+T)%len ;}data[flag] = flag_data ;}}void insert( int x,int P ){length++ ;int * big_data = new int[ length ];for(int i=length-1;i>=x;i--)big_data[i] = data[i-1];big_data[x-1] = P;for(int i=x-2;i>=0;i--)big_data[i] = data[i];delete [] data;data = big_data;}void delete_x(int x){for( int i = x-1;i < length-1 ; i++ ){data[i] = data[i+1];}length -- ;}int min(int x,int y){int min = INT_MAX;for(int i=x; i<=y; i++){if(data[i-1] < min )min = data[i-1];}return min;}void print_list(){for( int i=0; i<length; i++ ){cout<<data[i]<<" ";}cout<<endl;}};int main(){intList mylist;for(int i=1;i<10;i++)mylist.insert(i,i);mylist.print_list();mylist.insert( 1,4 );mylist.add( 1,9,1 );mylist.print_list( );mylist.delete_x( 3 );mylist.print_list( );cout<<mylist.min(5,9)<<endl;mylist.revolve(1,6,4);mylist.print_list( );mylist.reverse(1,4);mylist.print_list();system("pause");return 0;}
- poj 4090:超级备忘录
- 同心源超级备忘录
- poj 备忘录
- 同心源超级备忘录 源代码
- POJ 1579(备忘录算法)
- poj 1088 滑雪【DP备忘录】
- poj 1477(超级水题)
- poj 1141 Brackets Sequence 【DP&&备忘录】
- poj 1459 超级源点超级汇点EK最大流
- 备忘录
- 备忘录
- 备忘录
- 备忘录
- 备忘录
- 备忘录
- 备忘录
- 备忘录
- 备忘录
- 跳棋jump
- 编程题
- mysql 学习笔记2
- 理解inode
- asp.net中如何动态改变网页的title
- poj 4090:超级备忘录
- HDU 1863 畅通工程 (最小生成树是否存在)
- 【C语言】我的23个C语言check list
- 关于代码测试的几点思考
- Swift入门教程系列8-枚举
- 计蒜客 挑战难题 第19题:加一
- Java 通过 list 和 对象数组 来实现 简单的 分页显示
- 配置GDB支持STL调试
- Spell checker