제출 #1310566

#제출 시각아이디문제언어결과실행 시간메모리
1310566em4ma2비밀 (JOI14_secret)C++20
0 / 100
347 ms4452 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,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,l,lv+1); rec(r,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); // 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; // }
#Verdict Execution timeMemoryGrader output
Fetching results...