[codeforces] 498D Traffic Jams in th Land
2017-11-23 20:07
369 查看
原题
简单的线段树问题。
对于题目中,a[i]的范围是2~6,我们仔细思考可以得出第0秒和第60秒是一样的(因为2~6的最小公倍数是60,),然后我们可以建一个线段树,里面记录0~59秒时刻开始通过这段所需要的时间。(如果一定要说这是60棵线段树也不是不可以……)
#include<cstdio> #define N 100010 using namespace std; int n,a ,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; }
相关文章推荐
- CodeForces 167B - Wizards and Huge Prize 期望概率dp
- codeforces 883C Downloading B++ 枚举,贪心
- CodeForces - 630F Selection of Personnel (组合数学)
- codeforces 173E 组队
- [Codeforces] Round #285 (Div. 2) A、B
- CodeForces 630 J. Divisibility(数论)
- Codeforces 821 E. Okabe and El Psy Kongroo
- Balanced Substring CodeForces - 873B(思维+前缀和)
- CodeForces 630 N. Forecast(大水题)
- Codeforces 602C The Two Routes【最短路+思维】
- codeforces 259 div2 virtual Participation
- Codeforces 629B Far Relative’s Problem(简单区间贪心)
- codeforces 266B(Queue at the School) Java
- CodeForces - 520 C DNA Alignment——思路题
- Codeforces--630A--Again Twenty Five! (水题)
- Codeforces 707 C. Pythagorean Triples(找规律)——Codeforces Round #368 (Div. 2)
- Codeforces 496A. Minimum Difficulty
- codeforces 417D. Cunning Gena 状压dp
- Codeforces 820B Mister B and Angle in Polygon
- CodeForces - 520C DNA Alignment 推规律