首页 > 其他分享 >CF1920D. Array Repetition

CF1920D. Array Repetition

时间:2024-01-22 12:26:06浏览次数:19  
标签:int pos len i64 CF1920D 数组 lat Array Repetition

思路

用一个数组len记录每次操作后数组的长度,用一个数组lat记录每次操作后数组最后一个数字。对于每次询问,先二分查找出第几次操作能使数组的长度大于等于x

ac代码

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;
const i64 inf = 1e18;
typedef pair<int, int> pii;
const int mod = 1e9 + 7;
const int N = 1e6 + 10;

void solve() {
    int n, q;
    cin >> n >> q;
    vector<i64> len(n + 1), lat(n + 1);

    for (int i = 1; i <= n; i++) {
        int op;
        i64 x;
        cin >> op >> x;

        if (op == 1) {
            lat[i] = x;
            len[i] = len[i - 1] + 1;
        } else {
            lat[i] = lat[i - 1];
            if (len[i - 1] != 0) len[i] = len[i - 1] * min(x + 1, inf/len[i - 1] + 1);//查询最长只查到1e18
        }
    }

    auto query = [&](i64 x) {
        while (1) {
            int pos = upper_bound(len.begin() + 1, len.end(), x) - len.begin();
            if (pos == 1) return lat[pos];
            
            x %= len[pos - 1];
            if (x == 0) return lat[pos - 1];
        }
    };

    while (q --) {
        i64 x;
        cin >> x;
        cout << query(x) << ' ';
    }

    cout << endl;

}   

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    cout.tie(0);

    int t = 1;
    cin >> t;
    while (t --) solve();

    return 0;
}

标签:int,pos,len,i64,CF1920D,数组,lat,Array,Repetition
From: https://www.cnblogs.com/kichuan/p/17979775

相关文章

  • 【glibc】glib库数组GArray介绍
    glib库中的数组GArray类型很像C++标准容器库中的vector容器。要使用glib库中的数组中需要声明一个指向GArray类型的指针。GArray的定义如下:structGArray{gchar*data;guintlen;};然后就可以在这个数组前或者数组后添加数据,添加数据的时候数组也会像C++中的vector容器......
  • ValueError: Found array with dim 4. None expected <= 2.
     Traceback(mostrecentcalllast): File"train.py",line109,in<module>   out,eval_res=tasks.eval_forecasting(model,data,train_slice,valid_slice,test_slice,scaler,pred_lens,n_covariate_cols,args.max_train_length-1) Fil......
  • go gin 必须使用 dive 标记,它告诉 required 校验 深入到 slice、array 这样的子结
    packagemainimport( "fmt" "net/http" "github.com/gin-gonic/gin")typeuserstruct{ Namestring`json:"name"binding:"required"` Emailstring`json:"email"binding:"required,email"`......
  • CF1612G Max Sum Array
    MaxSumArrayLuoguCF1612G题面描述给定一个长为\(m\)的序列\(c_1,c_2,\dots,c_m\)。序列\(A\)满足:对于所有\(1\leqi\leqm\),\(i\)在\(A\)中出现了\(c_i\)次。定义一个序列\(A\)的值如下:\[f(A)=\sum_{1\leqi<j\leqn,a_i=a_j}j-i\]求满足条件的\(f......
  • 记录一下 ArrayBlockingQueue 消息堆积的问题
    前言由于之前这个系统的日志记录是被领导要求写表的,在不影响系统性能的前提下,日志的入库操作肯定是要改成异步进行的,当时利用ArrayBlockingQueue+线程+AOP简单的去实现了一下,但是初版代码测试下来发现了一个很严重的问题,就是日志丢失的问题,本文由此而来。初步构思代码实现逻辑实......
  • D. Array Repetition
    D.ArrayRepetitionJaydenhasanarray$a$whichisinitiallyempty.Thereare$n$operationsoftwotypeshemustperforminthegivenorder.Jaydenappendsaninteger$x$($1\leqx\leqn$)totheendofarray$a$.Jaydenappends$x$copiesofarra......
  • Java里ArrayList中的toArray()用法
    深入理解List的toArray()方法和toArray(T[]a)方法这两个方法都是将列表List中的元素转导出为数组,不同的是,toArray()方法导出的是Object类型数组,而toArray[T[]a]方法导出的是指定类型的数组。下面是两个方法的申明及说明,摘自Java8的API文档。toArray()方法的分析Object[]toA......
  • 15 Friendly Arrays
    FriendlyArrays打表#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;voidsolve(){ intn,m; cin>>n>>m; vector<int>a(n+1); vector<int>b(m+1); for(inti=1;i<=n;i++)cin>>a[i]; for(inti=1;i<......
  • Stack-array based implementation【1月17日学习笔记】
    点击查看代码//Stack-arraybasedimplementation#include<iostream>usingnamespacestd;#defineMAX_SIZE101intA[MAX_SIZE];//globleinttop=-1;//globlevoidpush(intx){ if(top==MAX_SIZE-1){ cout<<"error:stackoverflow"&l......
  • D. Array Repetition
    原题链接核心大事实1:对于查询的点k对应的值一定是某个操作过后的最后一个值核心大事实2:对于操作前数组长度大于k的都不用考虑核心小事实:点k有两种情况1.点k的位置在两次操作之间(乘法)2.点k的位置恰好位于某次操作后的最后一个点(乘法和加法都有可能)代码构建以此展开1.要不断......