BZOJ 3211: 花神游历各国
2018-03-05 21:42
344 查看
Description
Input
Output
每次x=1时,每行一个整数,表示这次旅行的开心度Sample Input
41 100 5 5
5
1 1 2
2 1 2
1 1 2
2 2 3
1 1 4
Sample Output
10111
11
HINT
对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9Solution
直接线段树维护。因为一个数不会被开方几次,我们可以直接暴力修改。
如果一个区间中的数都为 0/1 (开方后为自己),就打上一个标记(修改时可直接退出)。
时间复杂度 O(N log N) 。
Code
#include<cstdio> #include<cctype> #include<cmath> using namespace std; const int N=1e5+5; int ql,qr; int a ; long long f[N<<2]; bool g[N<<2]; inline int read() { int X=0,w=0; char ch=0; while(!isdigit(ch)) w|=ch=='-',ch=getchar(); while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); return w?-X:X; } inline void update(int v) { f[v]=f[v<<1]+f[v<<1|1]; g[v]=g[v<<1]&&g[v<<1|1]; } void make(int v,int l,int r) { if(l==r) { f[v]=a[l]; if(f[v]<=1) g[v]=true; return; } int mid=(l+r)>>1; make(v<<1,l,mid); make(v<<1|1,mid+1,r); update(v); } void change(int v,int l,int r) { if(g[v]) return; if(l==r) { f[v]=sqrt(f[v]); if(f[v]<=1) g[v]=true; return; } int mid=(l+r)>>1; if(ql<=mid) change(v<<1,l,mid); if(qr>mid) change(v<<1|1,mid+1,r); update(v); } long long find(int v,int l,int r) { if(ql<=l && r<=qr) return f[v]; int mid=(l+r)>>1; long long sum=0; if(ql<=mid) sum+=find(v<<1,l,mid); if(qr>mid) sum+=find(v<<1|1,mid+1,r); return sum; } int main() { int n=read(); for(int i=1;i<=n;i++) a[i]=read(); make(1,1,n); int m=read(); while(m--) { int x=read(); ql=read(),qr=read(); if(x==2) change(1,1,n); else printf("%lld\n",find(1,1,n)); } return 0; }
相关文章推荐
- BZOJ 3211-花神游历各国(线段树)
- [bzoj3211]:花神游历各国
- BZOJ 3211 花神游历各国
- BZOJ 3211: 花神游历各国/BZOJ 3038: 上帝造题的七分钟2 树状数组+并查集
- 树线段BZOJ 3211(花神游历各国-线段树区间开方)
- [BZOJ3211]花神游历各国-树状数组-并查集
- codevs2492 上帝造题的七分钟2 BZOJ3211 花神游历各国
- 【线段树/区间开平方】BZOJ3211-花神游历各国
- [BZOJ3211]花神游历各国&&[BZOJ3038] 上帝造题的七分钟2 树状数组+并查集
- 【BZOJ】3038: 上帝造题的七分钟2 && 3211: 花神游历各国
- BZOJ 3038 上帝造题的七分钟2 BZOJ 3211 花神游历各国 题解
- bzoj 3211: 花神游历各国 && bzoj 3038: 上帝造题的七分钟2
- BZOJ 3211: 花神游历各国(势能分析线段树)
- 【BZOJ3211】花神游历各国 并查集+树状数组
- [BZOJ3211] 花神游历各国/[BZOJ3038] 上帝造题的七分钟2
- BZOJ3038 && BZOJ3211 上帝造题的七分钟2 && 花神游历各国 (线段树 + 开方标记)
- 【bzoj3211】【花神游历各国】【线段树+并查集】
- [bzoj3211][并查集][树状数组]花神游历各国
- 【BZOJ】【3211】花神游历各国
- bzoj3211 花神游历各国 线段树