Noip前的大抱佛腳 奇技淫巧

2022-04-30 06:27:09 字數 1855 閱讀 1772

set查詢前驅後繼

multiset::iterator iter;

s.insert(x);

iter=s.find(x);//返回迭代器

iter--;//前驅

int ans=*iter;

s.erase(find(x));

return ans;

或者可以使用\(lower\_bound\)(大於等於)、\(upper\_bound\)(嚴格大於)函式

multiset::iterator iter;

iter=s.upper_bound(x);

需要注意的是,\(iter\)是乙個類似指標的東西,當\(set\)的結構發生改變時,\(iter\)所指向的值也會變!

刪除元素

s.erase(iter);//刪除迭代器所指的元素(multiset只刪乙個元素)

s.erase(x);//刪除所有的x元素(multiset就能把所有x刪掉)

s.erase(find(x));//只刪乙個x

map的遍歷

\(c++\)寫法

map::iterator iter;

for(iter=map.begin();iter!=map.end();iter++)

int a=iter->first,b=iter.second;

\(c++11\)寫法

for(auto x:map) cout查\(x\)是否在\(map\)中

1. if(map[x]!=0) ...

2. if(map.find(x)!=map.end()) ...

一定要使用第二種方法,因為若\(x\)不在\(map\)中,而呼叫\(map[x]\)的話會自動新增乙個結點\((x,0)\),使得常數變大或者發生錯誤

雙端佇列

#includedequeq;

q.push_front(x);

q.push_back(x);

q.pop_front(x);

q.pop_back(x);

q.size();

!q.empty();

值域在\(10^9\)左右的時候用它比map快得多!!!(10.16被卡常教訓)

空間計算:除以8(嚴格來說\(\lceil\frac\rceil×8\))

struct food

//表示按tim從小到大排序(因為預設是大根堆,不清楚可以試試,注意兩個const)

};

struct bignum

//表示一呼叫就會執行這個函式

int &operator (int x) //可以使用a[i]代替a.a[i]

void operator = (int x)

if(!w) a[++w]=0;

}bignum operator + (bignum b)

}a;

struct matrix

//可以用a[i][j]代替a.a[i][j]

matrix ()

matrix operator * (matrix b)

}base,ans;

ll mul(ll x,ll y,ll p)

sqrt返回的是double!!要強制轉成int才行

在呼叫之前一定要判是否在長度範圍內,否則會出現神奇的錯誤

否則就會出現不開o2訪問陣列負下標還拍上了的情況

奇技淫巧 NOIP的讀入優化

最近看到洛谷上面有乙個讀入優化的 inline char get char inline short read 說實話第乙個函式get char的第二行,這麼長一六三目運算子真心看不懂 下面的read函式裡面那個isspace 和isdigit 就是判斷這個字元是不是空格,是不是數字,是的就返回tr...

c 的奇技淫巧

關於陣列 數論演算法技巧 stl其他 while scanf d d n,m eof 等價於 while scanf d d n,m 2 前者eof為檔案結束符,較保險 後者 後的數字為輸入的變數的個數 不能只寫while scanf d d n,m 這樣無法結束讀入 wwq大佬教的,希望我不要和他...

Git的奇技淫巧

git常用命令集合,fork於tips專案 git是乙個 分布式版本管理工具 簡單的理解版本管理工具 大家在寫東西的時候都用過 回撤 這個功能,但是回撤只能回撤幾步,假如想要找回我三天之前的修改,光用 回撤 是找不回來的。而 版本管理工具 能記錄每次的修改,只要提交到版本倉庫,你就可以找到之前任何時...