library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub tko919/library

:heavy_check_mark: interpolate (one point)
(FPS/interpolate.hpp)

Required by

Verified with

Code

#pragma once

template<typename T>T Interpolate(vector<T>& ys,ll t){ // f(0),..,f(d) -> f(t)
    int d=ys.size()-1;
    if(t<=d)return ys[t];
    vector<T> L(d+1,1),R(d+1,1);
    rep(i,0,d)L[i+1]=L[i]*(t-i);
    for(int i=d;i;i--)R[i-1]=R[i]*(t-i);
    T ret;
    rep(i,0,d+1){
        T add=ys[i]*L[i]*R[i]*Fact<T>(i,1)*Fact<T>(d-i,1);
        if((d-i)&1)ret-=add;
        else ret+=add;
    }
    return ret;
}

/**
 * @brief interpolate (one point)
*/
#line 2 "FPS/interpolate.hpp"

template<typename T>T Interpolate(vector<T>& ys,ll t){ // f(0),..,f(d) -> f(t)
    int d=ys.size()-1;
    if(t<=d)return ys[t];
    vector<T> L(d+1,1),R(d+1,1);
    rep(i,0,d)L[i+1]=L[i]*(t-i);
    for(int i=d;i;i--)R[i-1]=R[i]*(t-i);
    T ret;
    rep(i,0,d+1){
        T add=ys[i]*L[i]*R[i]*Fact<T>(i,1)*Fact<T>(d-i,1);
        if((d-i)&1)ret-=add;
        else ret+=add;
    }
    return ret;
}

/**
 * @brief interpolate (one point)
*/
Back to top page