一道普通的题2
Time Limit: 500 MS Memory Limit: 64 MB
Submit Status
给出一个长为 n 的数列 a1…an,以及 n 个操作,操作涉及区间开方,区间求和。
Input
第一行输入一个数字 n(1≤n≤50000)。
第二行输入 n 个非负整数,第i个数字为 ai,(0≤ai≤109)以空格隔开。
接下来输入 n 行询问,每行输入四个数字 opt,l,r,c,以空格隔开。
若 opt=0,表示将位于[l,r]的之间的数字都开方。对于区间中每个 ai(l≤i≤r),ai→⌊√ai⌋
若 opt=1,表示询问位于[l,r] 的所有数字的和。
Output
对于每次询问,输出一z行一个数字表示答案。
保证所有数据在int
范围内
Sample input and output
Sample Input | Sample Output |
---|---|
4 1 2 2 3 0 1 3 1 1 1 4 4 0 1 2 2 1 1 2 4 |
6 2 |
其实这题还可以用分块做,详见我的博客,思路和分块差不多,遇到0或1就标记为0(再开方值不变),其他的标记为1,
如果一个区间标记为0,就不开方了&#x