This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#include "floppy.h"
#define ll long long
using namespace std;
const int maxn=40005;
int N,niz[maxn],K;
int st[4*maxn];
int get(int lg,int dg,int gde=1,int lc=1,int dc=K){
if(lg==lc and dg==dc)
return st[gde];
int sred=(lc+dc)/2;
if(dg<=sred)
return get(lg,dg,gde*2,lc,sred);
if(lg>sred)
return get(lg,dg,gde*2+1,sred+1,dc);
int v1,v2;
v1=get(lg,sred,gde*2,lc,sred);
v2=get(sred+1,dg,gde*2+1,sred+1,dc);
if(niz[v1]>niz[v2])
return v1;
return v2;
};
void makesegment(){
K=1;
while(K<N)
K<<=1;
for(int i=1;i<=N;i++)
st[i+K-1]=i;
niz[0]=-2e9;
for(int i=K-1;i>=1;i--){
if(niz[st[i*2]]>niz[st[i*2+1]])
st[i]=st[i*2];
else
st[i]=st[i*2+1];
}
}
void makestring(int l,int r,string &S){
if(r<l)
return;
if(l==r){
S.push_back('(');
S.push_back(')');
return;
}
int maks=get(l,r);
makestring(l,maks-1,S);
S.push_back('(');
makestring(maks+1,r,S);
S.push_back(')');
}
void read_array(int subtask_id, const std::vector<int> &v) {
N=v.size();
for(int i=1;i<=N;i++)
niz[i]=v[i-1];
string S;
makesegment();
makestring(1,N,S);
cerr<<"STRING JE "<<S<<endl;
for(int i=0;i<S.size();i++)
if(S[i]=='(')
S[i]='1';
else
S[i]='0';
save_to_floppy(S);
}
void decode(string &S,int l,int r,int br=0,int pre=0){
if(r<=l)
return;
//cerr<<l<<" "<<r<<endl;
int poz,val=0;
for(int i=r;i>=l;i--){
val+=S[i];
if(val==0){
poz=i;
break;
}
}
int idx=(poz-l)/2+1+pre;
cerr<<l<<" "<<r<<" "<<poz<<" "<<idx<<endl;
niz[idx]=br;
decode(S,l,poz-1,br-1,pre);
decode(S,poz+1,r-1,br-1,idx);
}
std::vector<int> solve_queries(int subtask_id, int n,
const std::string &bits,
const std::vector<int> &a, const std::vector<int> &b) {
N=n;
string S=bits;
for(int i=0;i<S.size();i++)
if(S[i]=='1')
S[i]=1;
else
S[i]=-1;
decode(S,0,S.size()-1);
cerr<<"REKONSTRUISAN NIZ"<<endl;
for(int i=1;i<=N;i++)
cerr<<niz[i]<<" ";
cerr<<endl;
makesegment();
vector<int> V;
for(int i=0;i<a.size();i++){
int x=a[i]+1;
int y=b[i]+1;
V.push_back(get(x,y)-1);
}
return V;
}
Compilation message (stderr)
floppy.cpp: In function 'void read_array(int, const std::vector<int>&)':
floppy.cpp:61:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
61 | for(int i=0;i<S.size();i++)
| ~^~~~~~~~~
floppy.cpp: In function 'std::vector<int> solve_queries(int, int, const string&, const std::vector<int>&, const std::vector<int>&)':
floppy.cpp:92:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
92 | for(int i=0;i<S.size();i++)
| ~^~~~~~~~~
floppy.cpp:104:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
104 | for(int i=0;i<a.size();i++){
| ~^~~~~~~~~
floppy.cpp: In function 'void decode(std::string&, int, int, int, int)':
floppy.cpp:81:16: warning: 'poz' may be used uninitialized in this function [-Wmaybe-uninitialized]
81 | int idx=(poz-l)/2+1+pre;
| ~~~~^~~
stub.cpp: In function 'void run2()':
stub.cpp:101:30: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
101 | if (query_answers.size() != M) {
| ~~~~~~~~~~~~~~~~~~~~~^~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |