Submission #96500

#TimeUsernameProblemLanguageResultExecution timeMemory
96500SecretAgent007Horses (IOI15_horses)C++17
Compilation error
0 ms0 KiB
#include "horses.h" #include <bits/stdc++.h> using namespace std; #include <bits/stdc++.h> using namespace std; #define int long long #define double long double #define mod 1000000007 vector<int> x(500003); vector<int> y(500003); int n; int power(int b, int e){ if(e == 0) return 1; if(e%2 == 1){ int a = power(b, e/2); return ((a*a)%mod*b)%mod; }else{ int a = power(b,e/2); return (a*a)%mod; } } int divi(int a, int b){ return ((a%mod)*(power(b%mod,mod-2))%mod)%mod; } struct node{ node* l, *r; double nbHorselog; double coeflog; int nbHorseMod; int coefMod; }; void Merge(node* &root){ if(root->l->nbHorselog >= (double)(0.69314718055994528623) && root->r->nbHorselog >= (double)(0.69314718055994528623)){ if(root->l->nbHorselog+root->r->nbHorselog+(root->r->coeflog) > root->l->nbHorselog+(root->l->coeflog)){ root->nbHorselog = root->l->nbHorselog+root->r->nbHorselog; root->coeflog = (root->r->coeflog); root->nbHorseMod = (root->l->nbHorseMod*root->r->nbHorseMod)%mod; root->coefMod = root->r->coefMod; return; }else{ root->nbHorselog = root->l->nbHorselog+root->r->nbHorselog; root->coeflog = (root->l->nbHorselog+(root->l->coeflog))-root->nbHorselog; root->nbHorseMod = (root->l->nbHorseMod*root->r->nbHorseMod)%mod; root->coefMod = divi(((root->l->coefMod)%mod), root->r->nbHorseMod); return; } } if(root->l->nbHorselog == 0){ if(root->l->coeflog <= root->r->nbHorselog+root->r->coeflog){ root->nbHorselog = root->r->nbHorselog; root->coeflog = root->r->coeflog; root->nbHorseMod = root->r->nbHorseMod; root->coefMod = root->r->coefMod; }else{ root->nbHorselog = root->r->nbHorselog; root->coeflog = root->l->coeflog-root->nbHorselog; root->nbHorseMod = root->r->nbHorseMod; root->coefMod = divi(root->l->coefMod, root->nbHorseMod); } return; }else if(root->r->nbHorselog == 0){ if(root->r->coeflog+root->l->nbHorselog >= root->l->nbHorselog+root->l->coeflog){ root->nbHorselog = root->l->nbHorselog; root->coeflog = root->r->coeflog; root->nbHorseMod = root->l->nbHorseMod; root->coefMod = root->r->coefMod; }else{ root->nbHorselog = root->l->nbHorselog; root->coeflog = root->l->nbHorselog+root->l->coeflog-root->nbHorselog; root->nbHorseMod = root->l->nbHorseMod; root->coefMod = divi(((root->l->nbHorseMod*root->l->coefMod)%mod), root->nbHorseMod); } } } void Build(node* root, int l, int r){ if(l == r){ root->l = root->r = NULL; root->nbHorselog = log((x[l])); root->coeflog = log((y[l])); root->coefMod = y[l]%mod; root->nbHorseMod = x[l]%mod; return; } node* le = new node{NULL}; node* ri = new node{NULL}; int mid = (l+r)/2; root->l = le; root->r = ri; Build(root->l, l, mid); Build(root->r, mid+1, r); Merge(root); } void Query(int l, int r, int p, int v, node* root, int c){ if(l == p && r == p){ if(c == 1){ root->nbHorselog = log(v); root->nbHorseMod = v%mod; }else{ root->coeflog = log(v); root->coefMod = v%mod; } return; } int mid = (l+r)/2; if(l <= p && mid >=p)Query(l, mid, p,v,root->l, c); if(mid+1 <= p && r >= p)Query(mid+1, r, p, v, root->r, c); Merge(root); } node* root = new node{NULL,NULL,1,1}; int init(int N, int X[], int Y[]) { for(int i = 0; i < n; i++)x[i+1] = x[i]; for(int i = 0; i < n; i++)y[i+1] = y[i]; Build(root,1,N); return (root->nbHorseMod*root->coefMod)%mod; } int updateX(int pos, int val) { Query(1,n,pos+1,val,root,1); return (root->nbHorseMod*root->coefMod)%mod; } int updateY(int pos, int val) { Query(1,n,pos+1,val,root,2); return (root->nbHorseMod*root->coefMod)%mod; }

Compilation message (stderr)

horses.cpp: In function 'void Build(node*, long long int, long long int)':
horses.cpp:92:29: warning: missing initializer for member 'node::r' [-Wmissing-field-initializers]
     node* le = new node{NULL};
                             ^
horses.cpp:92:29: warning: missing initializer for member 'node::nbHorselog' [-Wmissing-field-initializers]
horses.cpp:92:29: warning: missing initializer for member 'node::coeflog' [-Wmissing-field-initializers]
horses.cpp:92:29: warning: missing initializer for member 'node::nbHorseMod' [-Wmissing-field-initializers]
horses.cpp:92:29: warning: missing initializer for member 'node::coefMod' [-Wmissing-field-initializers]
horses.cpp:93:29: warning: missing initializer for member 'node::r' [-Wmissing-field-initializers]
     node* ri = new node{NULL};
                             ^
horses.cpp:93:29: warning: missing initializer for member 'node::nbHorselog' [-Wmissing-field-initializers]
horses.cpp:93:29: warning: missing initializer for member 'node::coeflog' [-Wmissing-field-initializers]
horses.cpp:93:29: warning: missing initializer for member 'node::nbHorseMod' [-Wmissing-field-initializers]
horses.cpp:93:29: warning: missing initializer for member 'node::coefMod' [-Wmissing-field-initializers]
horses.cpp: At global scope:
horses.cpp:119:36: warning: missing initializer for member 'node::nbHorseMod' [-Wmissing-field-initializers]
 node* root = new node{NULL,NULL,1,1};
                                    ^
horses.cpp:119:36: warning: missing initializer for member 'node::coefMod' [-Wmissing-field-initializers]
horses.cpp: In function 'long long int init(long long int, long long int*, long long int*)':
horses.cpp:121:23: warning: unused parameter 'X' [-Wunused-parameter]
 int init(int N, int X[], int Y[]) {
                       ^
horses.cpp:121:32: warning: unused parameter 'Y' [-Wunused-parameter]
 int init(int N, int X[], int Y[]) {
                                ^
/tmp/ccrldUf1.o: In function `main':
grader.c:(.text.startup+0x2db): undefined reference to `init(int, int*, int*)'
grader.c:(.text.startup+0x71a): undefined reference to `updateX(int, int)'
grader.c:(.text.startup+0x8a6): undefined reference to `updateY(int, int)'
collect2: error: ld returned 1 exit status