제출 #1219964

#제출 시각아이디문제언어결과실행 시간메모리
1219964AlgorithmWarriorWorst Reporter 3 (JOI18_worst_reporter3)C++20
100 / 100
169 ms7360 KiB
#include <bits/stdc++.h>

using namespace std;

int const TMAX=1e9;
int const NMAX=500005;
int n,q;
int dist[NMAX];
int speed[NMAX];

void read(){
    cin>>n>>q;
    int i;
    for(i=1;i<=n;++i)
        cin>>dist[i];
}

struct balls_interval{
    int spd,l,r;
};
vector<balls_interval>b_intv;

void precalc_speed(){
    speed[0]=1;
    int i;
    for(i=1;i<=n;++i){
        speed[i]=(dist[i]+speed[i-1]-1)/speed[i-1]*speed[i-1];
        if(speed[i]>TMAX)
            break;
    }
    speed[i]=TMAX+1;
    for(i=0;speed[i]<=TMAX;++i){
        int spd=speed[i],l=-i,r=-i;
        while(speed[i]==speed[i+1]){
            ++i;
            l=-i;
        }
        b_intv.push_back({spd,l,r});
    }
}

int inters(int l1,int r1,int l2,int r2){
    return max(0,min(r1,r2)-max(l1,l2)+1);
}

void process_queries(){
    while(q--){
        int timp,l,r;
        cin>>timp>>l>>r;
        int ans=0;
        for(auto [spd,lb,rb] : b_intv){
            int depl=timp/spd*spd;
            ans+=inters(lb+depl,rb+depl,l,r);
        }
        cout<<ans<<'\n';
    }
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    read();
    precalc_speed();
    process_queries();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...