답안 #464019

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
464019 2021-08-12T08:22:22 Z ACmachine Worst Reporter 3 (JOI18_worst_reporter3) C++17
100 / 100
739 ms 25328 KB
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template<typename T, typename U> using ordered_map = tree<T, U, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

typedef long long ll;
typedef long double ld;

typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

typedef vector<int> vi;
typedef vector<ll> vll;

#define FOR(i,j,k,in) for(int i=(j); i < (k);i+=in)
#define FORD(i,j,k,in) for(int i=(j); i >=(k);i-=in)
#define REP(i,b) FOR(i,0,b,1)
#define REPD(i,b) FORD(i,b,0,1)
#define pb push_back 
#define mp make_pair
#define ff first
#define ss second
#define all(x) begin(x), end(x)
#define MANY_TESTS int tcase; cin >> tcase; while(tcase--)
	
const double EPS = 1e-9;
const int MOD = 1e9+7;
const ll INFF = 1e18;
const int INF = 1e9;
const ld PI = acos((ld)-1);
const vi dy = {1, 0, -1, 0, -1, 1, 1, -1};
const vi dx = {0, 1, 0, -1, -1, 1, -1, 1};

void DBG(){cout << "]" << endl;}
template<typename T, typename ...U> void DBG(const T& head, const U... args){ cout << head << "; "; DBG(args...); }
#define dbg(...) cout << "Line(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__);
#define chk() cout << "Check at line(" << __LINE__ << ") hit." << endl;

template<class T, unsigned int U>
ostream& operator<<(ostream& out, const array<T, U> &v){out << "[";  REP(i, U) out << v[i] << ", ";  out << "]"; return out;}
template <class T, class U>
ostream& operator<<(ostream& out, const pair<T, U> &par) {out << "[" << par.first << ";" << par.second << "]"; return out;}
template <class T>
ostream& operator<<(ostream& out, const set<T> &cont) { out << "{"; for( const auto &x:cont) out << x << ", "; out << "}"; return out; }
template <class T, class U>
ostream& operator<<(ostream& out, const map<T, U> &cont) {out << "{"; for( const auto &x:cont) out << x << ", "; out << "}"; return out; }
template<class T>
ostream& operator<<(ostream& out, const vector<T> &v){ out << "[";  REP(i, v.size()) out << v[i] << ", ";  out << "]"; return out;}

template<class T>
istream& operator>>(istream& in, vector<T> &v){ for(auto &x : v) in >> x; return in; }
  
int main(){
 	ios_base::sync_with_stdio(false);
 	cin.tie(NULL); cout.tie(NULL);
    int n, q;
    cin >> n >> q;
    vector<ll> d(n);
    cin >> d;
    FOR(i, 1, n, 1){
        d[i] = (d[i] % d[i - 1] == 0 ? d[i] : (d[i] / d[i - 1] + 1) * d[i - 1]);
    }
    auto get = [&](int i, ll t){
        return (t - t % d[i] - (i + 1));
    };
    REP(i, q){
        ll t, l, r;
        cin >> t >> l >> r;
        int lo = 0;
        int hi = n - 1;
        int anshi = -1;
        while(lo <= hi){
            int mid = (lo + hi) >> 1;
            ll tm = get(mid, t);
            if(tm >= l && tm <= r){
                anshi = max(anshi, mid);
                lo = mid + 1;
            }
            if(tm < l){
                hi = mid - 1;
            }
            if(tm > r){
                lo = mid + 1;
            }
        }
        int anslo = INF;
        lo = 0;
        hi = n - 1;
        while(lo <= hi){
            int mid = (lo + hi) >> 1;
            ll tm = get(mid, t);
            if(tm >= l && tm <= r){
                anslo = min(anslo, mid);
                hi = mid - 1;
            }
            if(tm < l){
                hi = mid - 1;
            }
            if(tm > r){
                lo = mid + 1;
            }
        }
        //ioichan 
        if(anshi == -1){
            if(t >= l && t <= r)
                cout << 1 << "\n";
            else
                cout << 0 << "\n";
        }
        else{
            if(t >= l && t <= r)
                cout << anshi - anslo + 2 << "\n";
            else
                cout << anshi - anslo + 1 << "\n";
        }
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 640 ms 22660 KB Output is correct
2 Correct 660 ms 22760 KB Output is correct
3 Correct 655 ms 22652 KB Output is correct
4 Correct 708 ms 22592 KB Output is correct
5 Correct 739 ms 22720 KB Output is correct
6 Correct 667 ms 22596 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 1 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 640 ms 22660 KB Output is correct
2 Correct 660 ms 22760 KB Output is correct
3 Correct 655 ms 22652 KB Output is correct
4 Correct 708 ms 22592 KB Output is correct
5 Correct 739 ms 22720 KB Output is correct
6 Correct 667 ms 22596 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 446 ms 21208 KB Output is correct
14 Correct 433 ms 21888 KB Output is correct
15 Correct 413 ms 20436 KB Output is correct
16 Correct 430 ms 20940 KB Output is correct
17 Correct 515 ms 25220 KB Output is correct
18 Correct 525 ms 25216 KB Output is correct
19 Correct 509 ms 25320 KB Output is correct
20 Correct 521 ms 25156 KB Output is correct
21 Correct 515 ms 25232 KB Output is correct
22 Correct 527 ms 25240 KB Output is correct
23 Correct 542 ms 25292 KB Output is correct
24 Correct 530 ms 25328 KB Output is correct
25 Correct 672 ms 22664 KB Output is correct
26 Correct 662 ms 22724 KB Output is correct
27 Correct 562 ms 24896 KB Output is correct
28 Correct 540 ms 25156 KB Output is correct
29 Correct 549 ms 24760 KB Output is correct
30 Correct 565 ms 24916 KB Output is correct
31 Correct 554 ms 25124 KB Output is correct
32 Correct 540 ms 21252 KB Output is correct
33 Correct 0 ms 204 KB Output is correct