洛谷題目傳送門
考場上一眼看出這是個毒瘤線段樹準備槓題,發現實在太難調了,被各路神犇虐哭qwq
考後看到各種優雅的暴力ac。。。。。。寶寶心裡苦qwq
題面裡面是一堆亂七八糟的限制和性質,這時候需要冷靜想想有沒有可利用的地方。蒟蒻一開始往勢能線段樹上面想了想。
定義乙個全局勢能函式,為所有\(c_i的位置個數。注意兩個操作的修改都不會小於原來的數。
乙個是改\(b\),是單點修改,線段樹內跳\(\log\)層,勢能函式至多加\(1\)。
修改b就比較輕鬆,只要找到對應的葉子節點改完後一路回溯即可。
很多事都是說起來容易做起來難,這題也不例外。除錯幾乎花了整個晚上。要注意的細節很多,也只好自己仔細思考了。
時間複雜度\(o(n\log n+q\log^2n)\),上界很鬆。多出來的\(\log\)是區間改a時需要快速冪更新pa造成的。
跑了不到200ms,比什麼樹套樹、分塊還是要好看一點,但是被暴力碾壓也是有點無奈啊~
#include#define rg register
#define r rg int
#define i inline
#define g if(++ip==ie)fread(ip=buf,1,n,stdin)
using namespace std;
typedef long long ll;
const ll n=1<<18,yl=1e9+7;
char buf[n],*ie=buf+n,*ip=ie-1;
int y,a[n];
i int in()
return x;
}i ll qpow(rg ll b,r k)
struct node
i void dn()
}i void build(r s,r e)
i void upda()
i void updb(r s)
i void bound(r s)
};int main()
return 0;
}
洛谷 P1645 序列
炒雞明顯的貪心題,主要就想讓一段區間與另一段裡面重合的數越多越好。於是先按照區間右端排序,然後盡可能的把數都往右靠攏,最後與另一段區間的前面的重合。然後可以用個flag來記錄哪些數被選了什麼的。include includeusing namespace std const int maxn 100...
洛谷 P1631 序列合併
題目描述 有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n 2個和,求這n 2個和中最小的n個。輸入輸出格式 輸入格式 第一行乙個正整數n 第二行n個整數ai,滿足ai ai 1且ai 10 9 第三行n個整數bi,滿足bi bi 1且bi 10 9.資料規模 對於50 的資料中,滿...
洛谷 P1631 序列合併
有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n 2個和,求這n 2個和中最小的n個。第一行乙個正整數n 第二行n個整數ai,滿足ai ai 1且ai 10 9 第三行n個整數bi,滿足bi bi 1且bi 10 9.輸出僅一行,包含n個整數,從小到大輸出這n個最小的和,相鄰數字之間...