[codeforces] 498D Traffic Jams in th Land

原题

简单的线段树问题。

对于题目中,a[i]的范围是2~6,我们仔细思考可以得出第0秒和第60秒是一样的(因为2~6的最小公倍数是60,),然后我们可以建一个线段树,里面记录0~59秒时刻开始通过这段所需要的时间。(如果一定要说这是60棵线段树也不是不可以……)

#include<cstdio>
#define N 100010
using namespace std;
int n,a[N],q,x,y;
char j;
struct hhh
{
    int l,r,dt[65];
}tre[N*4];

int read()
{
    int ans=0,fu=1;
    char j=getchar();
    for (;(j<‘0‘ || j>‘9‘) && j!=‘-‘;j=getchar()) ;
    if (j==‘-‘) fu=-1;
    for (;j>=‘0‘ && j<=‘9‘;j=getchar()) ans*=10,ans+=j-‘0‘;
    return ans*fu;
}

void build(int i,int l,int r)
{
    tre[i].l=l;
    tre[i].r=r;
    if (l==r)
    {
    for (int t=0;t<60;t++)
    if (!t || t%a[l]==0) tre[i].dt[t]=2;
    else tre[i].dt[t]=1;
    return ;
    }
    int mid=(l+r)>>1;
    build(i*2,l,mid);
    build(i*2+1,mid+1,r);
    for (int t=0;t<60;t++)
    tre[i].dt[t]=tre[i*2].dt[t]+tre[i*2+1].dt[(t+tre[i*2].dt[t])%60];
}

void modify(int i,int x)
{
    if (tre[i].l==tre[i].r && x==tre[i].l)
    {
    for (int t=0;t<60;t++)
    if (t%a[x]==0) tre[i].dt[t]=2;
    else tre[i].dt[t]=1;
    return ;
    }
    int mid=(tre[i].l+tre[i].r)>>1;
    if (x<=mid) modify(i*2,x);
    else modify(i*2+1,x);
    for (int t=0;t<60;t++)
    tre[i].dt[t]=tre[i*2].dt[t]+tre[i*2+1].dt[(t+tre[i*2].dt[t])%60];
}

int query(int i,int l,int r,int t)
{
    if (tre[i].l==l && tre[i].r==r) return tre[i].dt[t%60];
    int mid=(tre[i].l+tre[i].r)>>1;
    if (r<=mid) return query(i*2,l,r,t);
    if (l>mid) return query(i*2+1,l,r,t);
    else
    {
    int p=query(i*2,l,mid,t);
    p+=query(i*2+1,mid+1,r,(t+p)%60);
    return p;
    }
}

int main()
{
    n=read();
    for (int i=1;i<=n;i++) a[i]=read();
    build(1,1,n);
    q=read();
    while (q--)
    {
    j=getchar();
    x=read();
    y=read();
    if (j==‘C‘) a[x]=y,modify(1,x);
    else printf("%d\n",query(1,x,y-1,0));
    }
    return 0;
}
时间: 2024-11-02 03:47:29

[codeforces] 498D Traffic Jams in th Land的相关文章

Codeforces 498D Traffic Jams in the Land | 线段树

题目大意: 给坐标轴1~n的点,每个点有一个权值,从一个点走到下一个点需要1s,如果当前时间是权值的倍数就要多花1s 给出q组操作,C表示单点修改权值,A表示询问0时刻x出发到y的时间 题解:因为权值只有2,3,4,5,6,所以60是一个周期,我们维护一颗线段树,维护0到59时刻出发从l到r+1用的时间 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define N 100010 5 us

Traffic Jams in the Land(线段树好题)

Traffic Jams in the Land CodeForces - 498D Some country consists of (n?+?1) cities, located along a straight highway. Let's number the cities with consecutive integers from 1 to n?+?1 in the order they occur along the highway. Thus, the cities are co

CF498D:Traffic Jams in the Land——题解

https://vjudge.net/problem/CodeForces-498D http://codeforces.com/problemset/problem/498/D 题面描述: 一些国家由(n + 1)个城市组成,位于一条直路上.我们用连续的整数从1到n + 1按照高速公路上出现的顺序对城市进行编号.因此,城市由高速公路的n段连接起来,第i段连接城市i和i + 1.高速公路的每一段都与一个正整数ai相关联 - 表示何时交通拥堵期出现在该段上. 为了从城市x到城市y(x <y),一些

CF498D Traffic Jams in the Land

嘟嘟嘟 题面:有n条公路一次连接着n + 1个城市,每一条公路有一个堵塞时刻a[i],如果当前时间能被a[i]整除,那么通过这条公路需要2分钟:否则需要1分钟. 现给出n条公路的a[i],以及m次操作.每一次操作:1.C x d:将第x条的堵塞时刻改为d.2.A x y:询问从城市x到城市y的所需时间. 这能想到是一个线段树的题,虽然做过好多道线段树的题,但遇到这种思路比较新奇的题,独立的想出来还是有一点困难. 于是稍微参照了一下题解. 我们观察一下a[i],2 <= a[i] <= 6,很小

codeforces 498D Unbearable Controversy of Being (暴力乱搞)

传送门:点击打开链接 题目大意: 定义下图为"damn rhombus",给定一个有向图,求出有多少个"damn rhombus". 解题思路1: 分析可以得出其实"damn rhombus"的意思就是求a->c通过2个节点中转的个数.也就是说 如果a->c中间中转了x个点,那么对于点对(a,c)来说"damn rhombus"就有C(x,2)个. 那么通过层数为2的bfs就可以得出答案. #include <

Codeforces Round #284 (Div. 1)

A. Crazy Town 这一题只需要考虑是否经过所给的线,如果起点和终点都在其中一条线的一侧,那么很明显从起点走点终点是不需要穿过这条线的,否则则一定要经过这条线,并且步数+1.用叉积判断即可. 代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<string> 5 #include<map> 6 #define N 100010 7 #def

ural 2020 Traffic Jam in Flower Town

2020. Traffic Jam in Flower Town Time limit: 1.0 secondMemory limit: 64 MB Having returned from Sun City, Dunno told all his friends that every shorty may have a personal automobile. Immediately after that so many citizens took a fancy of becoming ro

新概念英语第三册51-60课(转)

Lesson 51  Predicting the future 预测未来 1.预测世界的未来Predicting the future是众所周知的困难.is notoriously difficult. 众所周知预测未来很困难.Predicting the future is notoriously difficult. 众所周知预测未来很困难. 2.谁过去能够曾经想象过, Who could have imagined, 在20世纪70年代中叶,in the mid 1970s, 例如,fo

python推荐淘宝物美价廉商品 2.0

改动: 新增功能 :可选择只看天猫或淘宝 代码模块化封装,参数配置或输入单独在一个py文件管理,主函数功能只留出参数传入在setting配置的py文件里. main.py代码: 1 # -*- coding: utf-8 -*- 2 import urllib 3 import urllib2 4 import re 5 import time 6 import random 7 import os 8 from math import log 9 from math import log10