LA 4726 Average

来源:互联网 发布:centos png 编辑:程序博客网 时间:2024/06/06 02:19

斜率优化&单调队列

我也还没看懂

《浅谈数形结合思想在信息学竞赛中的应用》

#include
#include
#include
using namespace std;
const int MAXN(100010); 

 
char str[MAXN]; 
int que[MAXN]; 
double sum[MAXN]; 
int front, rear; 
 
double get_k(int a, int b) 

    return(sum[b]-sum[a])/(b-a); 

 
int main() 

    intT; 
    scanf("%d",&T); 
   while(T--) 
   
       int n, l , i; 
       scanf("%d%d", &n, &l); 
       scanf("%s", str+1); 
       for(i = 1; i <= n; ++i) 
           sum[i] = sum[i-1]+str[i]-'0'; 
       front = 0; 
       rear = -1; 
       int s = 0, e = l; 
       double ans = get_k(s, e); 
       int al = l; 
       for(i = l; i <= n; ++i) 
       
           int temp = i-l; 
           while(front < rear && get_k(que[rear], temp) <=get_k(que[rear-1], que[rear])) 
               --rear; 
           que[++rear] = temp; 
           while(front < rear && get_k(que[front], i) <=get_k(que[front+1], i)) 
               ++front; 
           double tans = get_k(que[front], i); 
           if(tans == ans && i-que[front] <al) 
           
               al = i-que[front]; 
               s = que[front]; 
               e = i; 
           
           else 
               if(tans > ans) 
               
                   ans = tans; 
                   al = i-que[front]; 
                   s = que[front]; 
                   e = i; 
               
       
       printf("%d %d\n", s+1, e); 
   
    return0; 


0 0
原创粉丝点击