BZOJ P3944 Sum 數論 杜教篩

2021-07-10 18:14:11 字數 2134 閱讀 9093

bzoj傳送門

一共t+1行

第1行為資料組數t(t<=10)

第2~t+1行每行乙個正整數n,代表一組詢問

output

一共t行,每行兩個用空格分隔的數ans1,ans2

sample input

6 1

2 8

13 30

2333

sample output

1 1

2 0

22 -2

58 -3

278 -3

1655470 2

hint

source

跟前面兩道題一樣!

迴圈變數要開long long !!!!!!!!!

long long/(long long/int)會計算錯誤!!!!

你在逗我!!!!!!

下面那個是拿雜湊表寫的

#include

#include

#define n 2000000

#define m 100005

inline long long in(long long x=0,char ch=getchar())

int cnt,t;int pr[n+10],mu[n+10];long long phi[n+10];long long n;

long long p[m];int

q[m];bool v[m];

void pre()

mu[i*pr[j]]=-mu[i];phi[i*pr[j]]=phi[i]*(pr[j]-1);}}

for(int i=2;i<=n;i++) mu[i]+=mu[i-1],phi[i]+=phi[i-1];

}inline long long getphi(int

x)inline int getmu(int

x)inline void calc(long long x)

}int main()

return

0;}

#include

#include

#define n 1000000

#define mod 2333333

inline

int in(int x=0,char ch=getchar())

int cnt,t,sum;int pr[n+10],mu[n+10];long

long phi[n+10];long

long n;

struct ans;}

ans operator * (const

int x)const ;}

}ans;

struct

maphash[mod];int head[mod];

void pre()

mu[i*pr[j]]=-mu[i];phi[i*pr[j]]=phi[i]*(pr[j]-1);}}

for(int i=2;i<=n;i++) mu[i]+=mu[i-1],phi[i]+=phi[i-1];

}inline

void add(long

long k,ans a)

inline ans calc(long

long x);int ha=x%mod;

for(int i=head[ha];i;i=hash[i].nxt) if(hash[i].k==x) return hash[i].v;

ans res;res.a=1,res.b=(x*(x+1))>>1;

for(long

long i=2,j;i<=x;i=j+1)

add(x,res);return res;

}int main()

return

0;}

BZOJ P2131 免費的餡餅

直接按餡餅暴力dp o n 2 顯然不能ac,因為n最大有100000 然後上網查了題解,直接按照dp的轉移方程化出乙個公式,然後發現是在乙個類似於二維的平面圖上進行轉移 然後通過一維先後進行更新,一維直接樹狀陣列維護完美ac,不得不說從公式推導到優化都很巧妙 orz看來我還是太弱了 include...

BZOJ P3295 動態逆序對

bzoj yzoj 我們可以預處理出每乙個點所包含的逆序對數k i 刪除的時候把這個值減去就可以了。問題在於之前的操作可能已經把當前要減去的逆序對數包含了。考慮乙個操作序列。在當前對答案減去k i 後,只需加上當前點與之前操作刪掉的點存在的逆序對數就好了。我們知道當前操作為a,滿足操作b在a之前,b...

BZOJ P2697 特技飛行 貪心

bzoj傳送門 time limit 10 sec memory limit 256 mb submit 710 solved 437 submit status discuss description 神犇航空開展了一項載客特技飛行業務。每次飛行長n個單位時間,每個單位時間可以進行一項特技動作,可...