暴力求优化!!!
查看原帖
暴力求优化!!!
815710
double_wings楼主2023/11/5 19:20

本地极限1.2-1.3

#include<bits/stdc++.h>
// #pragma GCC optimize("Ofast")
// #pragma GCC optimize("-funroll-loops")
using namespace std;
constexpr int N=1e5+5,P=1e9+7;
char buf[1<<21],*p1,*p2;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
int rd(){
	int num=0;char c=0;
	while(!isdigit(c))c=getchar();
	while(isdigit(c))num=num*10+c-'0',c=getchar();
	return num;
}

void wt(long long x,char ch=0){if(x<0) putchar('-'),wt(-x);else{if(x>=10) wt(x/10);putchar(x%10+'0');}if(ch) putchar(ch);return;}

int n;
int a[N];
signed main(){
	// freopen("c.in","r",stdin);
	// freopen("c.out","w",stdout);
	n=rd();
	long long res=0;
	for(int i=1;i<=n;i++)
    {
		a[i]=rd();
	}
    int i;
    int j,mx=0,mv;
    int p,mx1=0,mv1;
    int g,mx2=0,mv2;
	for(i=1;i+2<=n;i+=3)
    {
        mx=0;
        mx1=0;
        mx2=0;
		for(j=i;j-2>=1;j-=3)
        {
			if(a[j]>mx)mx=a[j],mv=mx/a[i];
			if(a[j]<=mv)res++;

			if(a[j-1]>mx)mx=a[j-1],mv=mx/a[i];
			if(a[j-1]<=mv)res++;
			
            if(a[j-2]>mx)mx=a[j-2],mv=mx/a[i];
			if(a[j-2]<=mv)res++;


			if(a[j+1]>mx1)mx1=a[j+1],mv1=mx1/a[i+1];
			if(a[j+1]<=mv1)res++;

			if(a[j]>mx1)mx1=a[j],mv1=mx1/a[i+1];
			if(a[j]<=mv1)res++;
			
            if(a[j-1]>mx1)mx1=a[j-1],mv1=mx1/a[i+1];
			if(a[j-1]<=mv1)res++;


			if(a[j+2]>mx2)mx2=a[j+2],mv2=mx2/a[i+2];
			if(a[j+2]<=mv2)res++;

			if(a[j+1]>mx2)mx2=a[j+1],mv2=mx2/a[i+2];
			if(a[j+1]<=mv2)res++;
			
            if(a[j]>mx2)mx2=a[j],mv2=mx2/a[i+2];
			if(a[j]<=mv2)res++;
		}
        while(j>0)
        {
			if(a[j]>mx)mx=a[j],mv=mx/a[i];
			if(a[j]<=mv)res++;

			if(a[j+1]>mx1)mx1=a[j+1],mv1=mx1/a[i+1];
			if(a[j+1]<=mv1)res++;

			if(a[j+2]>mx2)mx2=a[j+2],mv2=mx2/a[i+2];
			if(a[j+2]<=mv2)res++;
            j--;
        }
        p=j+1,g=j+2;
        while(p>0)
        {
			if(a[p]>mx1)mx1=a[p],mv1=mx1/a[i+1];
			if(a[p]<=mv1)res++;
            p--;
        }
        while(g>0)
        {
			if(a[g]>mx2)mx2=a[g],mv2=mx2/a[i+2];
			if(a[g]<=mv2)res++;
            g--;
        }
	}
    while(i<=n)
    {
        mx=0;
		for(j=i;j-2>=1;j-=3)
        {
			if(a[j]>mx)mx=a[j],mv=mx/a[i];
			if(a[j]<=mv)res++;

			if(a[j-1]>mx)mx=a[j-1],mv=mx/a[i];
			if(a[j-1]<=mv)res++;
			
            if(a[j-2]>mx)mx=a[j-2],mv=mx/a[i];
			if(a[j-2]<=mv)res++;
		}
        while(j>0)
        {
			if(a[j]>mx)mx=a[j],mv=mx/a[i];
			if(a[j]<=mv)res++;
            j--;
        }
        ++i;
    }
	wt(res);
	fclose(stdin);
	fclose(stdout);
	return 0;
}
2023/11/5 19:20
加载中...