九度1544

2024-05-10 22:38
文章标签 九度 1544

本文主要是介绍九度1544,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击打开链接


#include<cstdio>
#include<cstring>
#include<iostream>
#define MM 101010
#define Min(x,y) x<y?x:y
using namespace std;
int a[MM],d[MM][15];
int n,q;
void RMQ_init()
{int i,j;for(i=1;i<=n;i++)d[i][0]=a[i];for(j=1;(1<<j)<=n;j++){for(i=1;(i+(1<<j)-1)<=n;i++)d[i][j]=Min(d[i][j-1],d[i+(1<<(j-1))][j-1]);}
}
int RMQ(int l,int r)
{int k=0;while((1<<(k+1))<=r-l+1)k++;return Min(d[l][k],d[r-(1<<k)+1][k]);
}
int main()
{int i,j;//freopen("D:\\o.txt","r",stdin);while(~scanf("%d",&n)){for(i=1;i<=n;i++)scanf("%d",&a[i]);RMQ_init();scanf("%d",&q);while(q--){int r,l;scanf("%d%d",&l,&r);printf("%d\n",RMQ(l,r));}}return 0;
}


这篇关于九度1544的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977764

相关文章

九度1077(最大序列和)

题目链接:点击打开链接 解题思路: 很经典的一道题。首先考虑一下细节问题,当序列都是0时,显然最后要输出0;当序列都是负数时,显然要输出最大的数。 细节处理完了,就可以回到正常轨道。我们开两个变量,分别保存当前的序列和与之前的最大值,我们更新当前序列和的条件是如果当前序列和是负数的时候,那我们必须更新,否则一定会使最后结果减小。更新过程中还要更新之前最大值即可。 完整代码:

九度考研真题 浙大 2011-3浙大1004:Median

题目1004:Median //#include<iostream> //long long a1[1000010],a2[1000010]; //using namespace std; //int main(){ // long long n1,n2; // long long num; // // long long t; // wh

九度考研真题 浙大 2011-2浙大1002:Grading

题目1002:Grading #include<iostream> #include<stdio.h> #include<math.h>  using namespace std; int main() { double P,T,G1,G2,G3,Gj; double num; while(cin>>P) { cin>>T>>G1>>G2>>G

九度考研真题 浙大 2011-1浙大1001:A+B for Matrices

//题目1001:A+B for Matrices #include<iostream> #include<string.h> using namespace std; int main() { int M,N; int a1[11][11],a2[11][11]; int a_s[11],b_s[11]; int num=0; while(cin

九度考研真题 浙大 2010-2浙大1006:ZOJ问题

//题目1006:ZOJ问题 #include<iostream> #include<string.h> using namespace std; int main() { char s[1010]; char a[1010];//开始部分 char b[1010]; //中间部分  char c[1010];//后部分  int num1=0,n

九度考研真题 浙大 2010-1浙大1003:A+B

//题目1003:A+B #include<iostream> #include<string.h> using namespace std; int main() { int n1,n2; int s1[12],s2[12]; int s[12]; char c1[20],c2[20]; while(cin>>c1){ n1=0,n2=0;

九度考研真题 浙大 2009-1浙大1031:xxx定律

//1031:xxx定律 #include<iostream> using namespace std; int main(){ int n; while(cin>>n&&n!=0){ int num=0; while(n!=1){ if(n%2==0){ n/=2; num++; } else{ n=3*n+1; n/

九度考研真题 浙大 2008-3浙大1028:继续畅通工程

//题目1028:继续畅通工程 #include<iostream> #include<algorithm> using namespace std; int Tree[1010]; int findRoot(int x){ if(Tree[x]==-1) return x; else { int tmp=findRoot(Tree[x]); Tree[

九度考研真题 浙大 2008-2浙大 题目1029:魔咒词典 字符串比较

//题目1029:魔咒词典 #include<iostream> #include<stdio.h> #include<string.h> using namespace std; int main(){ char s1[1200][40],s2[1200][100]; char s[1200][100]; int num; while(gets(s)&

九度考研真题 浙大 2007-浙大1023:EXCEL排序 排序

//1023:EXCEL排序 #include<iostream>  #include<algorithm> #include<string.h> using namespace std; struct stu{ char nu[10]; char name[10]; int score; }stud[100100]; bool cmp1(stu A,