2 条题解

  • 1
    @ 2023-8-14 15:09:18
    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 2e5+10;
    
    int n,m,t;
    int f[N][21];
    int a[N];
    
    inline void read(int &x)
    {
    	x = 0;int f = 1;char c = getchar();
    	while(!isdigit(c)) {if(c == '-')f = -1;c = getchar();}
    	while(isdigit(c)) {x = (x<<1)+(x<<3)+(c^48);c = getchar();}
    }
    
    void ST_init()
    {
    	for(int i=1;i<=n;i++) f[i][0] = a[i];
    	int t = log(n)/log(2)+1;
    	for(int j=1;j<t;j++)
    		for(int i=1;i<=n-(1<<j)+1;i++)
    			f[i][j] = max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
    }
    
    int query(int l,int r)
    {
    	int k = log(r-l+1)/log(2);
    	return max(f[l][k],f[r-(1<<k)+1][k]);
    }
    
    int main()
    {
    	read(n);
    	for(int i=1;i<=n;i++) cin >> a[i];
    	ST_init();
    	read(m);
    	while(m--)
    	{
    		int l,r;
    		read(l);read(r);
    		cout << query(l,r) << endl;	
    	}
    	return 0;
    }
    
    • 0
      @ 2023-4-8 14:09:22

      90?

      #include<bits/stdc++.h>
      using namespace std;
      int a[5100000],n,m,x,y;
      int main()
      {
      scanf("%d",&n);
      for(int i=1;i<=n;i++)scanf("%d",&a[i]);
      scanf("%d",&m);
      for(int i=1;i<=m;i++)
      {
      int ans=-999999999;
      scanf("%d%d",&x,&y);
      for(int i=x;i<=y;i++)ans=max(ans,a[i]);
      printf("%d\n",ans);
      }
      return 0;
      }
      
      • 1

      「一本通 4.2 练习 1」天才的记忆

      信息

      ID
      601
      时间
      1000ms
      内存
      512MiB
      难度
      8
      标签
      递交数
      21
      已通过
      4
      上传者