From a836526826b18c9fac0c1d81cedd39d608d062a5 Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Fri, 9 Aug 2024 17:12:44 +0800 Subject: [PATCH] segment tree fix day5 perfect --- day5/perfect/fix.cpp | 92 ++++++++++++++++++++-------------------- day5/perfect/fix.cpp.old | 63 +++++++++++++++++++++++++++ xmake.lua | 4 +- 3 files changed, 111 insertions(+), 48 deletions(-) create mode 100644 day5/perfect/fix.cpp.old diff --git a/day5/perfect/fix.cpp b/day5/perfect/fix.cpp index 94822c9..e699540 100644 --- a/day5/perfect/fix.cpp +++ b/day5/perfect/fix.cpp @@ -1,63 +1,63 @@ #include using namespace std; +#define int long long const int MAX_N = 3e5+5; -const int MAX_K = 19; -int sMin[MAX_N][MAX_K]; -int sMax[MAX_N][MAX_K]; -int l2[MAX_N]; +int a[MAX_N],tmax[MAX_N*4],tmin[MAX_N*4]; +int n; +int ans=INT_MIN; +void build(int tmin[],int tmax[],int a[],int s,int e,int n){ + if(s==e){ + tmax[n]=tmin[n]=a[s]; + return; + } + int m=s+(e-s)/2; + build(tmin, tmax, a, s, m, n*2); + build(tmin, tmax, a, m+1, e, n*2+1); + tmax[n]=max(tmax[n*2],tmax[n*2+1]); + tmin[n]=min(tmin[n*2],tmin[n*2+1]); +} -#ifndef OITEST -#define PRINT_VALUE(v) -#endif +int search_max(int tmax[],int s,int e,int n,int l,int r){ + if(l<=s&&e<=r)return tmax[n]; + if(e>correctAns; - #define cin inputFile -#endif - cin.sync_with_stdio(false); +int search_min(int tmin[],int s,int e,int n,int l,int r){ + if(l<=s&&e<=r)return tmin[n]; + if(e>n; for(int i=1;i<=n;i++){ - cin>>sMin[i][0]; - sMax[i][0]=sMin[i][0]; + cin>>a[i]; } - for(int i=2;i<=n;i++){ - l2[i]=l2[i/2]+1; - } - int k=l2[n]+1; - for(int j=1;j<=k;j++){ - for(int i=1;i+(1< +using namespace std; + +const int MAX_N = 3e5+5; +const int MAX_K = 19; +int sMin[MAX_N][MAX_K]; +int sMax[MAX_N][MAX_K]; +int l2[MAX_N]; + + +#ifndef OITEST +#define PRINT_VALUE(v) +#endif + +int main(int argc,char* argv[]){ +#ifdef OITEST + // #define PRINT_VALUE(v){cout<<#v<<" :"<<(v)<>correctAns; + #define cin inputFile +#endif + cin.sync_with_stdio(false); + cin.tie(0); + l2[0]=0; + l2[1]=0; + int n; + cin>>n; + for(int i=1;i<=n;i++){ + cin>>sMin[i][0]; + sMax[i][0]=sMin[i][0]; + } + for(int i=2;i<=n;i++){ + l2[i]=l2[i/2]+1; + } + int k=l2[n]+1; + for(int j=1;j<=k;j++){ + for(int i=1;i+(1<