Description

 

Input

 

Output

每次x=1时,每行一个整数,表示这次旅行的开心度

Sample Input

4
1 100 5 5
5
1 1 2
2 1 2
1 1 2
2 2 3
1 1 4

Sample Output

101
11
11

HINT

对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9

Source

SPOJ2713 gss4 数据已加强

Solution

显然是一道线段树,开根号直接暴力就可以了,对于任意一个数最多开5次就变为1,之后就不要在开根了,打一个Tag记录一下。

type
tree=record
s,q,l,r:int64;
end;
var
n,m,k,x,y,i:longint;
f:array [..] of tree;
a:array [..] of longint;
procedure build(x,l,r:longint);
begin
f[x].l:=l;f[x].r:=r;
if l=r then
begin
f[x].s:=a[l];
if (f[x].s=) or (f[x].s=)
then f[x].q:=
else f[x].q:=;
exit;
end;
build(x<<,l,(l+r) >> );
build(x<<+,(l+r) >> +,r);
f[x].s:=f[x<<].s+f[x<<+].s;
f[x].q:=f[x<<].q and f[x<<+].q;
end; function plus(x,l,r:longint):int64;
var
mid:longint;
begin
plus:=;
if (f[x].l<=l) and (f[x].r>=r) then exit(f[x].s);
mid:=(f[x].l+f[x].r)>>;
if mid>=r
then plus:=plus+plus(x<<,l,r);
if mid<l
then plus:=plus+plus(x<<+,l,r);
if (mid>=l) and (mid<r)
then begin plus:=plus(x<<,l,r)+plus(x<<+,l,r) end;
end; procedure sq(x,l,r:longint);
var
mid:longint;
begin
if f[x].q=
then exit;
if (f[x].l=f[x].r) then
begin
f[x].s:=trunc(sqrt(f[x].s));
if (f[x].s=) or (f[x].s=)
then f[x].q:=;
exit;
end;
mid:=(f[x].l+f[x].r)>>;
if mid>=r
then sq(x<<,l,r);
if mid<l
then sq(x<<+,l,r);
if (mid>=l) and (mid<r)
then begin sq(x<<,l,r);sq(x<<+,l,r) end;
f[x].q:=f[x<<].q and f[x<<+].q;
f[x].s:=f[x<<].s+f[x<<+].s;
end; begin
read(n);
for i:= to n do
begin
read(a[i]);
end;
build(,,n);
read(m);
for i:= to m do
begin
read(k,x,y);
case k of
:writeln(plus(,x,y));
:sq(,x,y);
end;
end;
end.

【bzoj3211】花神游历各国的更多相关文章

  1. BZOJ3211花神游历各国

    BZOJ3211花神游历各国 BZOJ luogu 分块 记一个all表示该块是否全部<=1,如果all不为真就暴力修改 因为一个数被开根的次数不多,即使\(10^{12}\)只要开根6次也会变 ...

  2. bzoj3211花神游历各国&&bzoj3038上帝造题的七分钟2*

    bzoj3211花神游历各国 题意: n个数的序列,m个操作,操作两种:区间开根(向下取整)和区间求和.n≤100000,m≤200000,序列中的数非负且≤109. 题解: 一个≤109的数开6次根 ...

  3. bzoj3211 花神游历各国 线段树,势能分析

    [bzoj3211]花神游历各国 2014年3月17日2,7230 Description   Input   Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input ...

  4. BZOJ-3211花神游历各国 并查集+树状数组

    一开始想写线段树区间开方,简单暴力下,但觉得变成复杂度稍高,懒惰了,编了个复杂度简单的 3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Subm ...

  5. bzoj3211花神游历各国 线段树

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4252  Solved: 1547[Submit][Status][Discu ...

  6. BZOJ3211: 花神游历各国(线段树)

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 5692  Solved: 2114[Submit][Status][Discu ...

  7. [BZOJ3211]花神游历各国&&[BZOJ3038] 上帝造题的七分钟2 树状数组+并查集

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4057  Solved: 1480[Submit][Status][Discu ...

  8. bzoj3211: 花神游历各国(线段树) 同codevs2492

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 3628  Solved: 1326[Submit][Status][Discu ...

  9. [BZOJ3211]:花神游历各国(小清新线段树)

    题目传送门 题目描述: 花神喜欢步行游历各国,顺便虐爆各地竞赛.花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家) ...

  10. BZOJ3211 花神游历各国 并查集 树状数组

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3211 题意概括 有n个数形成一个序列. m次操作. 有两种,分别是: 1. 区间开根(取整) 2. ...

随机推荐

  1. MongoDB学习笔记(入门)

    一.文档的注意事项:1.  键值对是有序的,如:{ "name" : "stephen", "genda" : "male&quo ...

  2. 在VS中操作Mysql数据库

    1.实现mysql数据库与VS的连接,需要安装两个插件,作者装的是mysql-connector-net-6.9.9.msi和 mysql-for-visualstudio-1.2.6.msi. 2. ...

  3. html5 弹框 可用于安卓手机弹出输入框

    function text() { name=prompt("请输入wifi密码"); // 弹出input框 prompt('提示语','默认输入框字段') //alert(na ...

  4. thinkphp修改及编写标签库,编辑器的使用

    在view目录下创建Index_aaa.html <!DOCTYPE html> <html> <head> <meta charset="UTF- ...

  5. rabbitMQ学习(三)

    订阅/广播模式 发送端: import java.io.IOException; import com.rabbitmq.client.ConnectionFactory; import com.ra ...

  6. DUBBO参数验证

    public class ValidationParameter implements Serializable {           private static final long seria ...

  7. sql join用法学习

    为了在两个或更多的表中获取结果,我们常常会用到join inner join(又叫join) out join包括left join,right join和full join(也就是left+righ ...

  8. localstorage sessionstorage cookie 备忘

    /* sessionStorage: 保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被清空: localStorage: 保存的数据长期存在,下一次访问该网站的时候,网页可以直接 ...

  9. string.Join()的用法

    List<string> list = new List<string>(); list.Add("I"); list.Add("Love&quo ...

  10. mac 查看无线wifi的密码

    finder->应用程序->实用工具->钥匙串访问->右上角输入wifi名查找->显示密码(需要管理员账号)