HDU 4676 Sum Of Gcd【数论,数据结构(分块)】

静态区间查询,没有更新操作,瞬间就想起来了哪个O(n*sqrt(n))的做法。关键是区间转移的时候不会处理了,只能说数学拙计了……

对于此类问题的时间复杂度分析,详见:http://blog.csdn.net/yang_7_46/article/details/9618637

买一送一,之前一场多校的题目的题解给的是树状数组,其实也可以用这个算法水过,时间也挺快。

http://blog.csdn.net/yang_7_46/article/details/9734635



这道题目的数学分析,等我把整块数论的想明白了总结一下发上来。


#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;

#define N 20002
struct node {
    int l, r, b, id;
} q[N];
int n, a[N], m, L, R, c[N], phi[N];
ll sum, ans[N];
vector d[N];
bool cmp(const node &x, const node &y) {
    if (x.b == y.b) return x.r < y.r;
    return x.b < y.b;
}
ll add(int val) {
    ll ret = 0;
    for (int i=0; i


你可能感兴趣的:(HDU 4676 Sum Of Gcd【数论,数据结构(分块)】)