hdu 4747 Mex


思路:分析知道sum(1,i) (1<=i<=n) 具有單調性。每次求出1-i之間的所有可能值,

注意每次增加一個數時對結果的影響,用mp數組維護下就可以!!

代碼如下:

 

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 #include<iomanip>
 5 #include<cmath>
 6 #include<cstring>
 7 #include<vector>
 8 #define ll __int64
 9 using namespace std;
10 int a[200002],p[200002],mp[200002];
11 int main()
12 {
13     int n,cnt;
14     while(scanf("%d",&n)&&n){
15             for(int i=1;i<=n;i++)
16                   scanf("%d",&a[i]);
17             ll now=0,pre;
18             ll ans=0;
19             memset(p,0,sizeof(p));
20             memset(mp,0,sizeof(mp));
21             for(int i=1;i<=n;i++){
22                   if(a[i]<=n){
23                         pre=p[a[i]];
24                         p[a[i]]=i;
25                         for(int j=a[i];j<=n;j++){
26                               if(j) mp[j]=min(mp[j-1],p[j]);
27                               else mp[j]=p[j];
28                               if(mp[j]>pre){
29                                     now+=mp[j]-pre;
30                               }else break;
31                         }
32                   }
33                   ans+=now;
34             }
35             printf("%I64d\n",ans);
36     }
37     return 0;
38 }
View Code

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM