| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1310563 | em4ma2 | Secret (JOI14_secret) | C++20 | 0 ms | 0 KiB |
#include "bits/stdc++.h"
#include "secret.h"
//#include "secret.h"
// #include <stdio.h>
// #include <stdlib.h>
// #define MAX_N 1000
// #define MAX_Q 10000
// #define MAX_VALUE 1000000000
// static int N;
// static int A[MAX_N];
// static int Q;
// static int L[MAX_Q];
// static int R[MAX_Q];
// static int secret_count;
// int Secret(int X, int Y) {
// ++secret_count;
// if (!(0 <= X && X <= MAX_VALUE)) {
// fprintf(stderr, "Wrong Answer [1]\n");
// exit(0);
// }
// if (!(0 <= Y && Y <= MAX_VALUE)) {
// fprintf(stderr, "Wrong Answer [1]\n");
// exit(0);
// }
// return (X + 2 * (Y / 2) < MAX_VALUE) ? (X + 2 * (Y / 2)) : MAX_VALUE;
// }
using namespace std;
//#define int long long
#define ll long long
#define pb push_back
const int mxsz=1026;
int dst[10][mxsz];
vector<int>A;
int Query(int l,int r){
int L=-1;
if (l+1==r){
return A[l];
}
int x=__builtin_clz((l^r))-(32-10);
return Secret(dst[x][l],dst[x][r+1]);
}
void rec(int r,vector<int>a&,int l=0,int lv=0){
if (l+1==r){
dst[lv][l]=a[l];
return;
}
int mid=(l+r)/2;
dst[lv][mid-1]=a[mid-1];
for (int i=mid-2;i>=l;i--){
dst[lv][i]=Secret(a[i],dst[lv][i+1]);
}
dst[lv][mid]=a[mid];
for (int i=mid+1;i<r;i++){
dst[lv][i]=Secret(dst[lv][i-1],a[i]);
}
rec(mid,a,l,lv+1);
rec(r,a,mid,lv+1);
}
void Init(int n,int a[]){
int cnt=2;
int x=(log2(n)+1);
int N=1;
while (x--){
N*=2;
}
for (int i=0;i<n;i++){
A.pb(a[i]);
}
for (int i=n;i<N;i++){
A.pb(0);
}
n=N;
rec(n,A);
// for (int i=0;i<11;i++){
// int k=i+1;
// int b=0;
// int cnt2=0;
// while (k--){
// int mx=n/cnt;
// if (!b){
// for (int j=cnt2+mx-1;j>=cnt2;j--){
// if (j==cnt2+mx-1)dst[i][j]=A[j];
// else dst[i][j]=Secret(dst[i][j-1],A[j]);
// }
// cnt2+=mx;
// b^=1;
// }else{
// for (int j=cnt2+1;j<=cnt2+mx;j++){
// if (j==cnt2+1)dst[i][j]=A[j];
// else dst[i][j]=Secret(dst[i][j-1],A[j]);
// }
// cnt2+=mx;
// b^=1;
// }
// }
// cnt*=2;
// }
}
// signed main(){
// ios::sync_with_stdio(0);
// cin.tie(0);
// cout.tie(0);
// int n;
// cin>>n;
// int a[n];
// for (int i=0;i<n;i++){
// cin>>a[i];
// }
// Init(n,a);
// int q;
// cin>>q;
// while (q--){
// int l,r;
// cin>>l>>r;
// cout<<Query(l,r)<<endl;
// }
// return 0;
// }
