Submission #1144350

#TimeUsernameProblemLanguageResultExecution timeMemory
1144350asdfghjkSecret (JOI14_secret)C++20
0 / 100
20091 ms4956 KiB
#include "secret.h"
#include <bits/stdc++.h>
#define pb push_back
#define all(x) x.begin(), x.end()
#define F first
#define S second
#define con continue
using namespace std;
typedef long long ll;
typedef double db;
typedef long double ld;


//const ll N = 3e5 + 5;
const ll MOD = 1e9 + 7;
const ll maxn = 6e5 + 5;
const ll inf = 1e9+1;
const ll INF = 1e18;
const ll K = 31;

/*vector <ll> z_function(string s){
//    ll n = s.size();
//    ll l = 0,r = 0;
//    vector <ll> z(n);
//    for(ll i = 1;i < n;i++){
//        if(i <= r){
//            z[i] = (r - i + 1,z[i - l]);
//        }
//        while(i + z[i] < n && s[z[i]] == s[z[i] + i]){
//            z[i]++;
//        }
//        if(i + z[i] - 1 > r){
//            r = i + z[i]-1;
//            l = i;
//        }
//    }
}*/

/*vector <ll> prefix_function(string s){
    ll n = s.size();
    vector <ll> pi(n,0);
    for(ll i = 1;i < n;i++){
        ll j = pi[i - 1];
        while(j > 0 && s[i] != s[j]){
            j = pi[j - 1];
        }
        if(s[i] == s[j])++j;
        pi[i] = j;
    }
    return pi;
}*/
int b[1005],N;
int suf[1005][1005];
int pre[1005][1005];
void Init(int n,int a[]){
    for(int i = 1;i <= n;i++){
        b[i] = a[i - 1];
    }
    N= n;
    queue <pair<int,int> > q;
    q.push({1,n});
    while(q.size()){
        pair<int,int> z = q.front();
        int l = z.F;
        int r = z.S;
        int mid = (l + r) / 2;
        suf[mid][mid] = b[mid];
        for(int i = mid - 1;i >= l;i--){
            suf[mid][i] = Secret(suf[mid][i+1],b[i]);
        }
        pre[mid+1][mid+1] = b[mid+1];
        for(int i = mid + 2;i <= r;i++){
            pre[mid+1][i] = Secret(pre[mid+1][i-1],b[i]);
        }
        if(l < r){
            if(l != mid)q.push({l,mid});
            if(r != mid)q.push({r,mid});
        }
    }
}
int Query(int l,int r){
    l++;
    r++;
    if(l == r){
        return b[r];
    }
    int L = 1,R = N;
    while(1 == 1){
        int mid = (L + R) / 2;
        if(r <= mid){
            R = mid;
            con;
        }
        if(l > mid){
            L = mid + 1;
            con;
        }
        break;
    }
    int mid = (L + R) / 2;
    int ans = Secret(suf[mid][l],pre[mid+1][r]);
    return ans;
}
//main(){
//    ios_base::sync_with_stdio(0);
//    cin.tie(0);
//    ll abd = 1;
////    cin >> abd;
//    for(ll i = 1;i <= abd;i++){
//        solve();
//    }
//}
#Verdict Execution timeMemoryGrader output
Fetching results...