Submission #942820

# Submission time Handle Problem Language Result Execution time Memory
942820 2024-03-11T04:59:57 Z Foolestboy Sum Zero (RMI20_sumzero) C++14
100 / 100
348 ms 17440 KB
#include <bits/stdc++.h>

#define SQR(x)    (1LL * ((x) * (x)))
#define MASK(i)   (1LL << (i))
#define BIT(x, i) (((x) >> (i)) & 1)
#define fi        first
#define se        second
#define pb        push_back
#define all(x)    x.begin(), x.end()
#define rall(x)   x.rbegin(), x.rend()
#define sz(s)     (int)s.size()
#define prev      __prev
#define next      __next
#define left      __left
#define right     __right

#define mp make_pair
#define pii pair<int, int>
#define pll pair<ll, ll>
#define vi vector<int>
#define vll vector<ll>

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef unsigned int ui;

using namespace std;

const int mod = 1e9 + 7;
const int INF = 1e9 + 7;
const ll INFLL = (ll)2e18 + 7LL;
const ld PI = acos(-1);

const int dx[] = {1, -1, 0, 0, -1, 1, 1, -1};
const int dy[] = {0, 0, 1, -1, -1, -1, 1, 1};

template<class BUI, class TRONG>
    bool minimize(BUI &x, const TRONG y){
        if(x > y){
            x = y;
            return true;
        } else return false;
    }
template<class BUI, class TRONG>
    bool maximize(BUI &x, const TRONG y){
        if(x < y){
            x = y;
            return true;
        } else return false;
    }

/* Author : Bui Nguyen Duc Trong, Luong Van Chanh High School for the gifted*/
/* Template is copied by Trong */

                           /** Losing in Provincial Contests **/
                                    /** TRYING HARDER**/
                                   /**      ORZ     **/

/* -----------------[ MAIN CODE GOES HERE ]----------------- */

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int N = 4e5 + 10;
const int BASE = 15;
const int LOG = 4;

int n, q;
int a[N];
vector<ll> val;
int pw[LOG + 1];
int nxt[N][LOG + 1], z[N];

int Rand(int l, int r) { return l + rng() % (r - l + 1); }

void solve(){
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];
    ll cur = 0;
    for(int i = 1; i <= n; i++){
        cur += a[i];
        val.push_back(cur);
    }
    val.push_back(0);
    sort(all(val)); val.resize(unique(all(val)) - val.begin());
    cur = 0;
    for(int i = 0; i <= n; i++) cur += a[i], a[i] = lower_bound(all(val), cur) - val.begin();
    memset(nxt, 0x3f, sizeof nxt);
    for(int i = 0; i <= n + 1; i++) nxt[i][0] = z[i] = n + 1;
    pw[0] = 1;
    for(int i = 1; i <= LOG; i++) pw[i] = pw[i - 1] * BASE;
    for(int i = n; i >= 0; i--){
        nxt[i][0] = min(nxt[i + 1][0], z[a[i]]);
        z[a[i]] = i;
    }
    for(int j = 1; j <= LOG; j++) for(int i = 0; i <= n; i++){
        int cur = nxt[i][j - 1];
        for(int x = 1; x < BASE; x++) if(nxt[cur][j - 1] <= n + 1) cur = nxt[cur][j - 1];
        if(cur <= n + 1) nxt[i][j] = cur;
    }
    cin >> q;
    while(q--){
        int l, r; cin >> l >> r;
        int ans = 0;
        int p = l - 1;
        for(int i = LOG; i >= 0; i--){
            while(nxt[p][i] <= r){
                ans += pw[i];
                p = nxt[p][i];
            }
        }
        cout << ans << '\n';

    }
}
/*
10
1 2 -3 0 1 -4 3 2 -1 1
3
1 10
1 5
2 9
*/

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    const bool multitest = 0;
    int tt = 1; if(multitest) cin >> tt;

    while( tt-- ){

        solve();

    }

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 4 ms 10844 KB Output is correct
2 Correct 4 ms 10844 KB Output is correct
3 Correct 4 ms 10844 KB Output is correct
4 Correct 4 ms 10860 KB Output is correct
5 Correct 5 ms 10844 KB Output is correct
6 Correct 5 ms 10844 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 10844 KB Output is correct
2 Correct 4 ms 10844 KB Output is correct
3 Correct 4 ms 10844 KB Output is correct
4 Correct 4 ms 10860 KB Output is correct
5 Correct 5 ms 10844 KB Output is correct
6 Correct 5 ms 10844 KB Output is correct
7 Correct 73 ms 12340 KB Output is correct
8 Correct 64 ms 11988 KB Output is correct
9 Correct 76 ms 12168 KB Output is correct
10 Correct 72 ms 12176 KB Output is correct
11 Correct 57 ms 11980 KB Output is correct
12 Correct 71 ms 12280 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 10844 KB Output is correct
2 Correct 4 ms 10844 KB Output is correct
3 Correct 4 ms 10844 KB Output is correct
4 Correct 4 ms 10860 KB Output is correct
5 Correct 5 ms 10844 KB Output is correct
6 Correct 5 ms 10844 KB Output is correct
7 Correct 73 ms 12340 KB Output is correct
8 Correct 64 ms 11988 KB Output is correct
9 Correct 76 ms 12168 KB Output is correct
10 Correct 72 ms 12176 KB Output is correct
11 Correct 57 ms 11980 KB Output is correct
12 Correct 71 ms 12280 KB Output is correct
13 Correct 347 ms 17440 KB Output is correct
14 Correct 317 ms 16236 KB Output is correct
15 Correct 348 ms 16860 KB Output is correct
16 Correct 327 ms 16604 KB Output is correct
17 Correct 275 ms 16184 KB Output is correct
18 Correct 338 ms 16832 KB Output is correct