Submission #1510998


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define FOR(i, j, k) for(int i=j; i<=k; i++)
#define FFOR(i, j, k) for(int i=j; i<k; i++)
#define DFOR(i, j, k) for(int i=j; i>=k; i--)
#define bug(x) cerr<<#x<<" = "<<x<<'\n'
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef long double ld;
template <typename T> inline void read(T &x){
    char c;
    bool nega=0;
    while((!isdigit(c=getchar()))&&(c!='-'));
    if(c=='-'){
        nega=1;
        c=getchar();
    }
    x=c-48;
    while(isdigit(c=getchar())) x=x*10+c-48;
    if(nega) x=-x;
}
template <typename T> inline void writep(T x){
    if(x>9) writep(x/10);
    putchar(x%10+48);
}
template <typename T> inline void write(T x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    writep(x);
}
template <typename T> inline void writeln(T x){
    write(x);
    putchar('\n');
}
#define taskname "F"
const ll base=1000000007;
int n;
ll it[4000001];
ll lz[4000001];
void update(int i, int l, int r, int u, int v, ll x){
    if(l>v||r<u) return;
    if(u<=l&&v>=r){
        it[i]=(it[i]+x)%base;
        lz[i]=(lz[i]+x)%base;
    }
    else{
        int m=(l+r)/2;
        it[2*i]=(it[2*i]+lz[i])%base;
        lz[2*i]=(lz[2*i]+lz[i])%base;
        it[2*i+1]=(it[2*i+1]+lz[i])%base;
        lz[2*i+1]=(lz[2*i+1]+lz[i])%base;
        lz[i]=0;
        update(2*i, l, m, u, v, x);
        update(2*i+1, m+1, r, u, v, x);
        it[i]=(it[2*i]+it[2*i+1])%base;
    }
}
ll get(int i, int l, int r, int u, int v){
    if(l>v||r<u) return 0;
    if(u<=l&&v>=r) return it[i];
    else{
        int m=(l+r)/2;
        it[2*i]=(it[2*i]+lz[i])%base;
        lz[2*i]=(lz[2*i]+lz[i])%base;
        it[2*i+1]=(it[2*i+1]+lz[i])%base;
        lz[2*i+1]=(lz[2*i+1]+lz[i])%base;
        lz[i]=0;
        return get(2*i, l, m, u, v)+get(2*i+1, m+1, r, u, v);
    }
}
ll ans=0;
ll f[1000001];
int main(){
    #ifdef Megumin
        if(fopen(taskname".inp", "r"))
            freopen(taskname".inp", "r", stdin);
    #endif // Megumin
    read(n);
    f[0]=1;
    FFOR(i, 0, n){
        if(i) f[i]=get(1, 1, n, i, i);
        if(i+3<=n) update(1, 1, n, i+3, n, f[i]);
        update(1, 1, n, i+1, i+1, f[i]);
    }
    ll sq=n-1;
    sq=(sq*sq)%base;
    ll ans=(f[n-1]*n)%base;
    DFOR(i, n-2, 0){
        ans=(ans+f[i]*sq)%base;
        ans=(ans+f[i]*(max(n-max(n-i-1, 2)+1, 0)))%base;
    }
    ans=(ans+base)%base;
    writeln(ans);
}

Submission Info

Submission Time
Task F - Infinite Sequence
User johntitor
Language C++14 (GCC 5.4.1)
Score 1000
Code Size 2500 Byte
Status AC
Exec Time 1023 ms
Memory 43264 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1000 / 1000
Status
AC × 2
AC × 22
Set Name Test Cases
Sample 0_000.txt, 0_001.txt
All 0_000.txt, 0_001.txt, max_1000000.txt, max_999745.txt, max_999880.txt, max_999999.txt, min_1.txt, rnd_14.txt, rnd_22.txt, rnd_25002.txt, rnd_2956.txt, rnd_3.txt, rnd_380467.txt, rnd_407774.txt, rnd_52228.txt, rnd_68.txt, rnd_804783.txt, rnd_85984.txt, rnd_894324.txt, rnd_93.txt, rnd_963981.txt, rnd_968416.txt
Case Name Status Exec Time Memory
0_000.txt AC 2 ms 4352 KB
0_001.txt AC 651 ms 43264 KB
max_1000000.txt AC 1023 ms 43264 KB
max_999745.txt AC 1023 ms 43264 KB
max_999880.txt AC 1018 ms 43264 KB
max_999999.txt AC 1019 ms 43264 KB
min_1.txt AC 2 ms 4352 KB
rnd_14.txt AC 2 ms 4352 KB
rnd_22.txt AC 2 ms 4352 KB
rnd_25002.txt AC 21 ms 6528 KB
rnd_2956.txt AC 4 ms 4352 KB
rnd_3.txt AC 2 ms 4352 KB
rnd_380467.txt AC 365 ms 24832 KB
rnd_407774.txt AC 391 ms 24832 KB
rnd_52228.txt AC 44 ms 6784 KB
rnd_68.txt AC 2 ms 4352 KB
rnd_804783.txt AC 812 ms 43264 KB
rnd_85984.txt AC 74 ms 9088 KB
rnd_894324.txt AC 907 ms 43264 KB
rnd_93.txt AC 2 ms 4352 KB
rnd_963981.txt AC 980 ms 43264 KB
rnd_968416.txt AC 987 ms 43264 KB