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)
{