Eating Plan

2019南昌G

模数为合数,所以只有约3000个数字不为0

记录一下不为0的数字位置

H[x]代表距离为x的连续段的数字和的最大值

处理出H[x]

再H[x] = max(H[x],H[x-1])记录下前缀最大,

对每个询问二分答案

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,q;
int A[];
const int mod = ;
void init()
{
A[]=;
for(int i=;i<=;i++){
A[i]=(A[i-]*i)%mod;
}
}
int x;
vector<int>v;
int B[];
int H[];
int pre[];
signed main()
{
init();
scanf("%lld%lld",&n,&q);
v.push_back();
for(int i=;i<=n;i++){
scanf("%lld",&x);
if(x<=){
B[i]=A[x];
v.push_back(i);
}else{
B[i]=;
}
} for(int j=;j<v.size();j++){
pre[j]=(B[v[j]]+pre[j-])%mod;
}
for(int i=;i<=v.size();i++){
for(int j=;j+i-<v.size();j++){
H[v[j+i-]-v[j]+]=max(H[v[j+i-]-v[j]+],(pre[j+i-]-pre[j-]+mod)%mod);
}
}
for(int i=;i<=n;i++){
H[i]=max(H[i],H[i-]);
}
for(int i=;i<=q;i++){
scanf("%lld",&x);
int l = ,r =n+;
while(l+<=r){
int mid=(l+r)/;
if(H[mid]<x){
l= mid+;
}else r=mid;
}
if(l==n+){
cout<<-<<'\n';
}else{
cout<<l<<'\n';
}
}
}

Eating Plan的更多相关文章

  1. 2019 ICPC Asia Nanchang Regional E Eating Plan 离散化+前缀和

    题意: 给你n个盘子,这n个盘子里面分别装着1!到n!重量的食物,对于每一个询问k,找出一个最短的区间,使得区间和 mod 998857459 大于或等于k 盘子数量 n<=1e5 询问次数 m ...

  2. codeforces369A

    Valera and Plates CodeForces - 369A Valera is a lazy student. He has m clean bowls and k clean plate ...

  3. Slimming Plan

    问题 B: Slimming Plan 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Chokudai loves eating so much. However, his docto ...

  4. P2985 [USACO10FEB]吃巧克力Chocolate Eating

    P2985 [USACO10FEB]吃巧克力Chocolate Eating 题目描述 Bessie has received N (1 <= N <= 50,000) chocolate ...

  5. upc组队赛7 Slimming Plan

    Slimming Plan 题目描述 Chokudai loves eating so much. However, his doctor Akensho told him that he was o ...

  6. NC24724 [USACO 2010 Feb S]Chocolate Eating

    NC24724 [USACO 2010 Feb S]Chocolate Eating 题目 题目描述 Bessie has received \(N (1 <= N <= 50,000)\ ...

  7. 测试计划(Test Plan)

    测试计划(Test Plan) 版权声明:本文为博主原创文章,未经博主允许不得转载. 测试计划的概念: 测试计划是一个文档,描述了进行测试的测试范围,测试策略和方法,测试资源和进度.是对整个测试活动进 ...

  8. SQL Tuning 基础概述02 - Explain plan的使用

    1.explain plan的使用 SQL> explain plan for delete from t_jingyu; Explained. SQL> select * from ta ...

  9. POJ2175 Evacuation Plan

    Evacuation Plan Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4617   Accepted: 1218   ...

随机推荐

  1. java中的小知识点

    1.数据类型的相关知识点 1.1.java内置封装类的转换 java中内置的封装类Byte.Integer.Float.Double和Long都可以转换成double类型的数值:因为这些封装好的类中都 ...

  2. 委托、泛型委托、多播委托、匿名函数、lamda表达式、事件

    1.为什么要使用委托 将一个方法作为参数传递给另一个方法 2.委托概念 public delegate int 委托名(int a, int b); 声明一个委托类型,可以用访问修饰符修饰,deleg ...

  3. win10的64位操作系统安装Oracle、Sql数据库遇到的问题及解决

    因为工作需要,在重新安装操作系统(Win10)不久的电脑上安装Oracle的客户端(win32_11g)和PLSQL,这个本来就比较复杂,下面记录一下遇到的问题及解决方法. 我有储备多个Oracle的 ...

  4. 360度3D 旋转插件

    Circlr插件是一款基于jQuery的可以对图片进行360度全方位旋转展示的插件.Circlr通过按一定角度规律拍摄的产品图片,制作出可以使用鼠标拖动.鼠标滚轮和移动触摸来进行图片逐帧旋转的效果.比 ...

  5. 启动tomcat出现org.springframework.web.servlet.DispatcherServlet错误

    项目右键 properites ==> deployment Assembly => add lib包

  6. 当有多个相同的DIV时,我怎么判断我点击的是哪个

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. .NET Framework 2.0/3.0/3.5 以 v90 平台工具集为目标。请确保在计算机上安装了 Visual Studio 2008

    今天在Visual Studio2010下面开发C++应用的时候发现“.NET Framework 2.0/3.0/3.5 以 v90 平台工具集为目标.请确保在计算机上安装了 Visual Stud ...

  8. Codeforces1238F. The Maximum Subtree(树形dp)

    题目链接:传送门 思路: 题意说用线段的相交作为边,来构造树,所以不存在大于等于3个的线段两两相交,否则会构成环.因而构造出的树中,每个点最多只会与2个度大于1的节点相邻. 不妨把1设为树根,用deg ...

  9. Django学习系列5:为视图编写单元测试

    打开lists/tests.py编写 """向浏览器返回真正的HTML响应,添加一个新的测试方法""" from django.test i ...

  10. parted分区的步骤

    使用parted分区的步骤1. fdisk -l             ##查看一下当前的存储设备,这里可以看到新加入的磁盘,比如/dev/sdb2. parted /dev/sdb         ...