zoukankan      html  css  js  c++  java
  • codevs 4159 hzwer的迷の数列

    题目描述 Description

    hzwer找了一个人畜无害的迷の数列……

    现在hzwer希望对这个数列进行一些操作,请你来回答hzwer的问题。

    操作一:查询第i个数的大小

    操作二:把第i个数的大小改成x

    操作三:将整个序列反转。即把第i个数放到第n-i+1个。

    输入描述 Input Description

    输入数据第一行两个数n,m,表示数列长度和操作数。

    第二行n个数,表示n个元素初始值。

    以下m行,每行开头一个数opr,表示操作种类。

    opr=1,则后面接一个数i,表示查询第i个数大小。

    opr=2,则后面接两个数I,x,表示第i个数改成x。

    opr=3,表示序列反转。

    输出描述 Output Description

    对于每个询问,输出答案。

    样例输入 Sample Input

    4 6

    1 3 2 4

    1 3

    2 2 6

    3

    2 1 3

    1 3

    1 1 

    样例输出 Sample Output

    2

    6

    3

    数据范围及提示 Data Size & Hint

    对于20%数据,1<=n,m<=10.

    对于40%数据,1<=n,m<=100.

    对于60%数据,1<=n,m<=1000.

    对于100%数据,1<=n,m<=100000,1<=a[i]<=100000.

     思路:

    模拟,记录是否被反转。

    代码:

    #include<cstdio>
    using namespace std;
    int n,m,a[100001];
    bool flag;
    int main()
    {
        int i,j,x,y,z;
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++)
          scanf("%d",&a[i]);
        for(i=1;i<=m;i++)
        {
            scanf("%d",&x);
            if(x==1)
            {
                scanf("%d",&y);
                if(!flag)
                  printf("%d
    ",a[y]);
                else
                  printf("%d
    ",a[n-y+1]);
            }
            else
              if(x==2)
              {
                  scanf("%d%d",&y,&z);
                if(!flag)
                  a[y]=z;
                else
                  a[n-y+1]=z;  
              }
              else
                flag=!flag;
        }
        return 0;
    }
  • 相关阅读:
    014 要区分好slice,splice和split,方法如下
    108 shutil模块(了解)
    107 pathlib模块(了解)
    106 collections模块
    105 typing模块
    104 re模块
    103_01 matplotlib模块
    102 pandas模块
    101 numpy模块
    SQLserver找出执行慢的SQL语句
  • 原文地址:https://www.cnblogs.com/jyhywh/p/6058696.html
Copyright © 2011-2022 走看看