首页 > 其他分享 >Array Repetition

Array Repetition

时间:2024-03-14 18:14:22浏览次数:32  
标签:last read ll len while Array Repetition getchar

原题链接

题解

设 \(len_i\) 为第 \(i\) 次操作后的数组长度, \(last_i\) 为该数组的最后一个数字
那么对于第一个 \(len\) 大于 \(k\) 的 \(i\) 而言 \({A}_{i}[k] \to A_{i-1}[k_1]\)
其中 \(k_1=(k-1)\% len_{i-1}+1\)
如果 \(k\) 等于此时的 \(len_i\) 那么输出 \(last_i\)

小细节: \(len<=1e18\)

code

#define ll long long
#include<bits/stdc++.h>
using namespace std;

inline void read(ll &x) {
    x = 0;
    ll flag = 1;
    char c = getchar();
    while(c < '0' || c > '9'){
        if(c == '-')flag = -1;
        c = getchar();
    }
    while(c >= '0' && c <= '9') {
        x = (x << 3) + (x << 1) + (c ^ 48);
        c = getchar();
    }
    x *= flag;
}

inline void write(ll x)
{
    if(x < 0){
        putchar('-');
        x = -x;
    }
    if(x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
}

ll len[100005]={0},last[100005]={0};
int main()
{
    ll t;
    read(t);
    while(t--)
    {
        ll n,q;
        read(n); read(q);

        for(ll i=1;i<=n;i++)
        {
            ll c,x;
            cin>>c>>x;
            if(c==1)
            {
                len[i]=min((ll)2e18,len[i-1]+1);
                last[i]=x;
            }
            else
            {
                len[i]=2e18;
                if(len[i]/(x+1)<len[i-1])continue;
                len[i]=len[i-1]*(x+1);
                last[i]=last[i-1];
            }
        }
        while(q--)
        {
            ll k;
            read(k);
            ll i=lower_bound(len+1,len+1+n,k)-len;
            while(k!=len[i])
            {
                k=(k-1)%len[i-1]+1;
                i=lower_bound(len+1,len+1+n,k)-len;
            }
            cout<<last[i]<<" ";
        }
        puts("");
    }
    return 0;
}

标签:last,read,ll,len,while,Array,Repetition,getchar
From: https://www.cnblogs.com/pure4knowledge/p/18073624

相关文章

  • List集合-Arraylist
    Arraylist创建集合packageeight.list.arraylist;importjava.util.ArrayList;importjava.util.List;publicclassStudent{publicstaticvoidmain(String[]args){//创建集合//Listaa=newArrayList();ArrayListaa=newAr......
  • 【你也能从零基础学会网站开发】Web建站之javascript入门篇 Array数组
    ......
  • [LeetCode] 2789. Largest Element in an Array after Merge Operations
    Youaregivena0-indexedarraynumsconsistingofpositiveintegers.Youcandothefollowingoperationonthearrayanynumberoftimes:Chooseanintegerisuchthat0<=i<nums.length-1andnums[i]<=nums[i+1].Replacetheelementnums......
  • ArrayList和LinkedList底层原理的区别和使用场景
    (1)ArrayList底层是动态数组,查询快、增删慢。存储空间是连续的,可以根据寻址方式直接找到对应的元素位置,所以查询时间复杂度是o(1)。扩容:ArrayList支持动态扩容,在每次新增元素的时候会判断容量是否溢出,如果溢出则会进行扩容操作。当size=elementData.length时,表示数据数量已经超过......
  • D. Game With Array
    https://codeforces.com/problemset/problem/1355/DWehaveaconstructiveproblemwhereweneedtoconstruceanarraywitharequiredsumvalueusingnelements.Ourtaskistodetermineifthereexistsavaluekands-kthatcannotbethesumofanysubs......
  • C#面:System.Array.CopyTo() 和 System.Array.Clon() 的区别
    二者都是用于复制数组的方法,但它们有一些区别:System.Array.CopyTo():方法签名:voidCopyTo(Arrayarray,intindex)功能:将当前数组的所有元素复制到另一个数组中。参数:array:目标数组,即要将元素复制到的数组。index:目标数组中的起始索引,从该索引开始复制元素。返回值:无注意......
  • java8中,Arrays.sort()默认是升序的,对于基本数据类型,使其降序怎么实现
    对于引用数据类型,自定义比较器对象,实现Comparator接口/Comparable接口对于基本数据类型,自定义比较器对象,将基本数据类型转换成对应的包装类型即可但是这样写是错误的,importjava.util.Arrays;importjava.util.Comparator;publicclassSortExample{publicstatic......
  • Qt QByteArray与int、float、vector互转
    QByteArray的转换一般在串口通信中常用,将int、float、double转换为4个字节的数组(如255->[0,0,0,255],本文章一律用10进制表示),或将4个字节的数组转换为int、float、double(如[0,0,0,255]->255)。在QT界面中的使用流程,笔者总结为以下思路:从上位机发送一帧指令到串口(封包、根据具体......
  • Fancy Arrays
    好题中的好题看这篇题解这篇题解的那个绝对值不应该打的,因为那里本来就是表示的差分数组解释一下什么叫确定最小值。当确定了差分数组之后,我们如果确定了\(a_1\),整个数组就确定了;即使我们将\(a_1\)当成一个变量,\(a_i\)与\(a_1\)的差值也是知道的,所以我们一定知道这个数列的最小......
  • Qt 将16进制的内容的QString字符串转为QByteArray数组
    1.QString存储十六进制内容我要发送的十六进制内容是0105040100将其储存在QString字符串中1QStringstr;2str="0105040100";2.核心语句将两位的字符串转换为16进制的Int型数字,然后通过强制类型转换成char类型的字符。(具体作用方式我还没去看,但是有用)(char)str.m......