poj 3368 rmq ***

來源:互聯網
上載者:User

標籤:

題意:給出n個數和Q個詢問(l,r),對於每個詢問求出(l,r)之間連續出現次數最多的次數。

 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 #define MOD 100000000710 const int INF=0x3f3f3f3f;11 const double eps=1e-5;12 typedef long long ll;13 #define cl(a) memset(a,0,sizeof(a))14 #define ts printf("*****\n");15 int n,m,tt;16 const int MAXN = 100005;17 int dp[MAXN][20];18 int mm[MAXN];19 //初始化RMQ, b數組下標從1開始,從0開始簡單修改20 void initRMQ(int n,int b[])21 {22 mm[0] = -1;23 for(int i = 1; i <= n;i++)24 {25 mm[i] = ((i&(i-1)) == 0)?mm[i-1]+1:mm[i-1];26 dp[i][0] = b[i];27 }28 for(int j = 1; j <= mm[n];j++)29 for(int i = 1;i + (1<<j) -1 <= n;i++)30 dp[i][j] = max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);31 }32 //查詢最大值33 int rmq(int x,int y)34 {35 int k = mm[y-x+1];36 return max(dp[x][k],dp[y-(1<<k)+1][k]);37 }38 int a[MAXN],f[MAXN];39 int main()40 {41     int i,j,k;42     #ifndef ONLINE_JUDGE43     freopen("1.in","r",stdin);44     #endif45     while(scanf("%d",&n)!=EOF)46     {47         if(n==0)  break;48         scanf("%d",&m);49         for(i=1;i<=n;i++)50         {51             scanf("%d",&a[i]);52             f[1]=1;53             if(i!=1)54             {55                 if(a[i]==a[i-1])56                 {57                     f[i]=f[i-1]+1;58                 }59                 else60                     f[i]=1;61             }62         }63         /*for(i=1;i<=n;i++)64         {65             printf("%d ",f[i]);66         }67         printf("\n");*/68         initRMQ(n,f);69         while(m--)70         {71             int uu,v;72             scanf("%d%d",&uu,&v);73             int u=uu;74             while(u<=v&&a[u]==a[u-1])75             {76                 u++;77             }78             int ans=rmq(u,v);79             ans=max(u-uu,ans);80             printf("%d\n",ans);81         }82     }83 }

 

poj 3368 rmq ***

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.