USACO 2009 Dec Silver 2.Music Notes

题目大意就是要区间进行分段,然后进行查询。

对于60%的数据来说,只需要进行桶排即可每次只要读入后,对

该区间进行维护即可。时间和空间都比较充裕

对于100%的数据,我们需要对这个算法进行优化。首先所有数的加和已经超过了108,这就意味着桶排这种方式已经被限制。我们考虑以下两种做法

01.online

对于查找来说,较为快捷且简便的方法莫过于二分,二分查找

区间是一个不错的方法。每次我们可以存一下时间的分界点(类

似前缀和),存到数组里,最后在数组里找到第一个小于询问即可

总的时间复杂度O?n ?Qlog(n)?

02.offline

对于询问来说,由于询问的无序性造成困难,所以我们对寻问

进行排序,然后从头开始遍历给出的序列,每次对小于当前和但

是大于上一次和的部分的询问更新答案, 时间复杂度为

O(n?Q?Qlog(Q)) 。二者都比较优秀。

代码实现

/*
    DEMO 离线
    时间复杂度  O(N+M)
    预计 100
 */
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 500000+5
inline int read()
{
    int x = 0, f = 1; char ch = getchar();
    while (ch < ‘0‘ || ch > ‘9‘) { if (ch == ‘-‘) f = -1; ch = getchar(); }
    while (ch >= ‘0‘ && ch <= ‘9‘) { x = x * 10 + ch - ‘0‘; ch = getchar(); }
    return x * f;
}
int a[N],n,q;
int T[1200000+5];
struct Question
{
    int num,TO;
    int ans;
    void R(int i)
    {
        num=i;
        TO=read();
        ans=0;
    }
    bool operator < (const Question &z)const
    {
        return TO < z.TO;
    }
}Q[N];
bool cmp(Question a,Question b)
{
    return a.num< b.num;
}
void solve ()
{
    long long tmp=0;
    for(int i=1;i<=n;++i)
    {
        a[i]=read();
        for(int j=tmp;j<tmp+a[i];++j)
            T[j]=i;
        tmp+=a[i];
    }
    while(q--)
    {
        int tmp1=read();
        printf("%d\n",T[tmp1] );
    }
}
int main()
{
    cin>>n>>q;
    if(n<=10000)
    {
        solve ();
        return 0;
    }
    for(int i=1;i<=n;++i)
        a[i]=read();
    for(int i=1;i<=q;++i)
        Q[i].R(i);
    sort (Q+1,Q+q+1);
    long long tmp=0;
    int j=1;
    for(int i=1;i<=n;++i)
    {
        tmp+=a[i];
        for(; Q[j].TO<tmp && j<=q ;++j)
            Q[j].ans=i;
    }
    sort (Q+1,Q+q+1,cmp);
    for(int i=1;i<=q;++i)
        printf("%d\n",Q[i].ans );
    return 0;
}
时间: 2024-10-14 02:58:47

USACO 2009 Dec Silver 2.Music Notes的相关文章

USACO翻译:USACO 2014 DEC Silver三题

USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 奶牛IDs 搬家 英文题目名称 piggyback cowids relocate 可执行文件名 piggyback cowids relocate 输入文件名 piggyback.in cowids.in relocate.in 输出文件名 piggyback.out cowids.out relocate.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较

USACO翻译:USACO 2013 DEC Silver三题

USACO 2013 DEC SILVER 一.题目概览 中文题目名称 挤奶调度 栅栏油漆 奶牛排队 英文题目名称 msched paint lineup 可执行文件名 msched paint lineup 输入文件名 msched.in paint.in lineup.in 输出文件名 msched.out paint.out lineup.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全文比较 二.运

Usaco 滑雪比赛 Bobsledding, 2009 Dec(dp)

Description 滑雪比赛bobsled 贝西参加了一场高山急速滑雪比赛,滑道总长度为 L.出发时,她的初速度为 1,贝西可以加速 或减速,每过 1 米,她能将速度增加 1.减少 1 或保持不变.在滑雪的过程中,贝西会遇到 N 个转 弯点,编号为 i 的转弯点距离起点有 Ti 米.安全起见,贝西到达 i 号转弯点时的速度不能超过 Si. 穿过终点的速度是没有限制的.请问在整个比赛过程中,贝西能够达到的最大速度是多少? Input Format 第一行:两个整数 L 和 N,2 ≤ L ≤

USACO 2013 Nov Silver Pogo-Cow

最近因为闲的蛋疼(停课了),所以开始做一些 USACO 的银组题.被完虐啊 TAT 貌似 Pogo-Cow 这题是 2013 Nov Silver 唯一一道可说的题目? ? Pogo-Cow Description (大意是一条直线上有一些带权值的点,可以选择一个点作为出发点,选好一个前进方向(左或右)然后不断地向前跳到另一个点,得分为这个点的权值,要求每一跳的跳跃距离不小于前一跳,求能获得的最大得分) In an ill-conceived attempt to enhance the mob

USACO月赛—JAN12 Silver

题目描述 After several years of record milk production, Farmer John now operates an entire network of N farms (1 <= N <= 100). Farm i is located at position (x_i, y_i) in the 2D plane, distinct from all other farms, with both x_i and y_i being integers.

USACO翻译:USACO 2012 FEB Silver三题

USACO 2012 FEB SILVER 一.题目概览 中文题目名称 矩形草地 奶牛IDs 游戏组合技 英文题目名称 planting cowids combos 可执行文件名 planting cowids combos 输入文件名 planting.in cowids.in combos.in 输出文件名 planting.out cowids.out combos.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较

USACO翻译:USACO 2014 NOV Silver三题

USACO 2013 NOV SILVER 一.题目概览 中文题目名称 未有的奶牛 农场航线 贝西洗牌 英文题目名称 nocow vacation shuffle 可执行文件名 nocow vacation shuffle 输入文件名 nocow.in vacation.in shuffle.in 输出文件名 nocow.out vacation.out shuffle.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较

usaco 过路费 Cow Toll Paths, 2009 Dec

Description 翰家有 N 片草地,编号为 1 到 N ,彼此之间由 M 条双向道路连接,第 i 条道路连接了 Ai 和Bi,两片草地之间可能有多条道路,但没有道路会连接同一片草地,现有的道路可以保证任意两片草 地都是连通的. 有一天,约翰宣布奶牛走路要收过路费,只要奶牛走过第 i 条道路,就要收费 Li 元.此外,约 翰还要求每头奶牛购买牌照,他为每片草地设置了牌照标准,如果奶牛购买的牌照价格低于某片草地 的标准,她将被禁止进入那片草地.第 i 片草地的牌照标准为 Ci. 新政策一出,

USACO翻译:USACO 2014 MARCH Silver三题

USACO 2014 MARCH 一.题目概览 中文题目名称 农田灌溉 懒牛 牛叫 英文题目名称 irrigation lazy mooomoo 可执行文件名 irrigation lazy mooomoo 输入文件名 irrigation.in lazy.in mooomoo.in 输出文件名 irrigation.out lazy.out mooomoo.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全