day 2 數學基礎 &資料結構1
好吧,實際上好多我也不會
質數
bool is_prime(int n)
{
if(n<2) return flase;
for(int i=2;i<=sqrt(n);i++)
if(n%i==0) return flase;
return true;
}
質數篩
基本上用歐式曬
void prime(int n)
{
memset(v,0,sizeof(v));
for(int i=2;i<=n;i++)
{
if(v[i]) continue;
cout<<i<<endl;
for(int j=2;j<=n/i;j++) v[i*j]=1;
}
}
剩下的估計初賽也不考
資料結構
並查集
int find(int x)
{
if(x==fa[x])return fa[x];
return fa[x]=get(fa[x]);
}
void merge(int x,int y)
{
fa[get(x)]=get(y);
}
另外還有擴充套件與,邊帶全
在我部落格,不再重複
樹狀陣列
#include<bits/stdc++.h>
using namespace std;
inline long long read(){
long long num=0;int z=1;char c=getchar();
if(c=='-') z=-1;
while((c<'0'||c>'9')&&c!='-') c=getchar();
if(c=='-') z=-1,c=getchar();
while(c>='0'&&c<='9') num=(num<<1)+(num<<3)+(c^48),c=getchar();
return z*num;
}
int m,n;
int a;
int tree[2000005];
int lowbit(int x)
{
return x&-x;
}
long long add(int x,int k)
{
while(x<=n)
{
tree[x]+=k;
x+=lowbit(x);
}
}
long long ask(int x)
{
long long ans=0;
while(x!=0)
{
ans+=tree[x];
x-=lowbit(x);
}
return ans;
}
int main(){
n=read();m=read();
int last=0,now;
for(int i=1;i<=n;i++)
{
now=read();
add(i,now-last);
last=now;
}
for(int i=1;i<=m;i++)
{
int o,x,y,k;
o=read();
if(o==1)
{
x=read();y=read();k=read();
add(x,k);
add(y+1,-k);//區間
}
else{
x=read();
cout<<ask(x)<<endl;
}
}
return 0;
}
逆序對
樓蘭圖圖,很經典
for(int i=n;i;i--)
{
ans+=ask(a[i]-1);
add(a[i],1);
}
#include <cstdio>
#include <cstring>
#include <iostream>
#define ll long long
using namespace std;
const int N = 200006;
int n, a[N], c[N], l[N], r[N];
int ask(int x) {
int ans = 0;
while (x) {
ans += c[x];
x -= x & -x;
}
return ans;
}
void add(int x, int y) {
while (x <= n) {
c[x] += y;
x += x & -x;
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
memset(c, 0, sizeof(c));
for (int i = n; i; i--) {
r[i] = ask(a[i] - 1);
add(a[i], 1);
}
memset(c, 0, sizeof(c));
for (int i = 1; i <= n; i++) {
l[i] = ask(a[i] - 1);
add(a[i], 1);
}
ll ans = 0;
for (int i = 1; i <= n; i++)
ans += (ll)(n - i - r[i]) * (i - 1 - l[i]);
cout << ans << " ";
ans = 0;
for (int i = 1; i <= n; i++) ans += (ll)r[i] * l[i];
cout << ans << endl;
return 0;
}
作者:ruanmowen
連結:https://www.acwing.com/activity/content/code/content/323834/
來源:AcWing
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
線段樹
注意4倍空間
struct segmentTree
{
int l,r;
int dat;
}t[SIZE*4];
void build(int p,int l,int r)
{
t[p].l=l,t[p].r=r;
if(l==r) {
t[p].dat=a[l];return ;
}
int mid=l+r>>1;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
t[p].dat=t[p*2+1].dat+t[p*2].dat;
}
build(1,1,n);
void change(int p,int x,int v)
{
if(t[p].l==t[p].r)
{
t[p].dat=v;return ;
}
int mid=t[p].l+t[p].r>>1;
if(x<=mid)change(p*2,x,v);
else change(p*2+1,x,v);
t[p].dat=t[p*2].dat+t[p*2+1].dat;
}
change(1,x,v);
相關文章
- Redis基礎知識(學習筆記1--五種基礎資料結構)Redis筆記資料結構
- 資料結構基礎學習之緒論資料結構
- Redis基礎資料結構Redis資料結構
- 資料結構與演算法(1)- 基礎概念資料結構演算法
- 資料結構的練習day1資料結構
- 資料結構基礎 連結串列資料結構
- 資料結構基礎學習之線性表資料結構
- 資料結構基礎知識資料結構
- 基礎資料結構大賞資料結構
- 【JAVA Web基礎學習】Day1JavaWeb
- Redis基礎——剖析基礎資料結構及其用法Redis資料結構
- python基礎學習day2Python
- 資料結構基礎學習之(棧和佇列)資料結構佇列
- 資料結構基礎學習之(串與陣列)資料結構陣列
- Redis原始碼學習——基礎資料結構之SDSRedis原始碼資料結構
- 基礎知識1——資料物理,邏輯儲存結構
- 資料結構學習(C++)——遞迴【2】(1) (轉)資料結構C++遞迴
- Redis基礎資料結構之字串Redis資料結構字串
- Redis基礎資料結構之MapRedis資料結構
- Redis基礎資料結構之SkipListRedis資料結構
- 大資料基礎架構總結大資料架構
- 資料結構基礎--雜湊表資料結構
- 淺析Redis基礎資料結構Redis資料結構
- 資料結構基礎第4講資料結構
- 資料結構基礎第3講資料結構
- 基礎資料結構之陣列資料結構陣列
- 基礎資料結構之遞迴資料結構遞迴
- Redis基礎資料結構之連結串列Redis資料結構
- 人工智慧必備數學基礎:高等數學基礎(1)人工智慧
- 重學C語言_資料結構與基礎語法C語言資料結構
- 資料結構 & 演算法 in Swift (一):Swift基礎和資料結構資料結構演算法Swift
- 零基礎學Java-基礎語法篇day1Java
- 前端基礎系列(三) -- 演算法 + 資料結構基礎前端演算法資料結構
- 人工智慧必備數學基礎:高等數學基礎(2)人工智慧
- JS基礎總結(1)——資料型別JS資料型別
- Day2--Mysql基礎MySql
- 公共基礎知識-資料結構-樹資料結構
- 前端資料結構---相關基礎概念前端資料結構