Submission #154102

#TimeUsernameProblemLanguageResultExecution timeMemory
154102beso123Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
64 / 100
3073 ms163460 KiB
#include<bits/stdc++.h> #define int long long using namespace std; int n; int mas[4000001]; int T[1000001]; int mx[1000001]; int mn[1000001]; int R[1000001]; vector <int> v[4000001]; void buildM (int p,int tl,int tr){ if (tl==tr){ mn[p]=R[tl]; return ; } int mid=tl+tr>>1; buildM(p+p,tl,mid); buildM(p+p+1,mid+1,tr); mn[p]=min(mn[2*p],mn[2*p+1]); } int findM (int p,int tl,int tr,int l,int r){ if(l>r) return 0; if (l<=tl&&tr<=r){ return mn[p]; } if (tl>r||l>tr){ return 0; } int mid= tl+tr>>1; int a=findM(p+p,tl,mid,l,r); int b=findM(p+p+1,mid+1,tr,l,r); return min(a,b); } void build (int p,int tl,int tr){ if (tl==tr){ v[p].push_back(mas[tl]); mx[p]=mas[tl]; T[p]=0; return ; } int mid=tl+tr>>1; build(p+p,tl,mid); build(p+p+1,mid+1,tr); int e=0,i=0; while (e<v[2*p+1].size()||i<v[2*p].size()){ if (e==v[2*p+1].size()){ v[p].push_back(v[2*p][i]); i++; continue; } if (i==v[2*p].size()){ v[p].push_back(v[2*p+1][e]); e++; continue; } if (v[2*p+1][e]<v[2*p][i]){ v[p].push_back(v[2*p+1][e]); e++; } else{ v[p].push_back(v[2*p][i]); i++; } } //cout<<p<<" "<<v[p].size()<<endl; int MAX=0; for (int i=tl;i<=tr;i++){ if (mas[i]<MAX){ T[p]=max(T[p],MAX+mas[i]); } MAX=max(mas[i],MAX); } mx[p]=max(mx[2*p],mx[2*p+1]); } int CURMAX=0; int find (int p,int tl,int tr,int l,int r){ if (l<=tl&&tr<=r){ int beg=0,en=v[p].size()-1,as=-1; while (beg<=en){ int mid=(beg+en>>1); if(v[p][mid]>=CURMAX){ en=mid-1; } else{ beg=mid+1; as=mid; } } int ke; int e=CURMAX; CURMAX=max(CURMAX,mx[p]); if (as==-1) return T[p]; else ke=max(T[p],e+v[p][as]); return ke; } if (tl>r||l>tr){ return 0; } int mid= tl+tr>>1; int a=find(p+p,tl,mid,l,r); int b=find(p+p+1,mid+1,tr,l,r); return max(a,b); } int t; int l[1000001],r[1000001],x[1000001]; set <pair <int,int> > s; main (){ ios_base::sync_with_stdio(false); cin>>n>>t; int MIN=1000000000000; for (int i=1;i<=n;i++){ cin>>mas[i]; MIN=min(MIN,mas[i]); } bool ok=true; for (int i=1;i<=t;i++){ cin>>l[i]>>r[i]>>x[i]; CURMAX=0; if (x[i]>MIN){ ok=false; } } if (ok){ for (int i=1;i<=n;i++){ if(mas[i]>mas[i+1]){ R[i+1]=-1; } } buildM(1,1,n); for (int i=1;i<=t;i++){ CURMAX=0; int wow=findM (1,1,n,l[i]+1,r[i]); cout<<(wow!=-1)<<endl; } } else{ build (1,1,n); for (int i=1;i<=t;i++){ CURMAX=0; int wow=find (1,1,n,l[i],r[i]); cout<<(wow<=x[i])<<endl; } } return 0; }

Compilation message (stderr)

sortbooks.cpp: In function 'void buildM(long long int, long long int, long long int)':
sortbooks.cpp:16:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int mid=tl+tr>>1;
          ~~^~~
sortbooks.cpp: In function 'long long int findM(long long int, long long int, long long int, long long int, long long int)':
sortbooks.cpp:32:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int mid= tl+tr>>1;
           ~~^~~
sortbooks.cpp: In function 'void build(long long int, long long int, long long int)':
sortbooks.cpp:44:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int mid=tl+tr>>1;
          ~~^~~
sortbooks.cpp:49:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while (e<v[2*p+1].size()||i<v[2*p].size()){
         ~^~~~~~~~~~~~~~~~
sortbooks.cpp:49:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while (e<v[2*p+1].size()||i<v[2*p].size()){
                            ~^~~~~~~~~~~~~~
sortbooks.cpp:50:8: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (e==v[2*p+1].size()){
       ~^~~~~~~~~~~~~~~~~
sortbooks.cpp:55:8: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (i==v[2*p].size()){
       ~^~~~~~~~~~~~~~~
sortbooks.cpp: In function 'long long int find(long long int, long long int, long long int, long long int, long long int)':
sortbooks.cpp:85:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
    int mid=(beg+en>>1);
             ~~~^~~
sortbooks.cpp:106:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  int mid= tl+tr>>1;
           ~~^~~
sortbooks.cpp: At global scope:
sortbooks.cpp:114:7: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main (){
       ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...