轉自hh大神的代碼,本來想自己的寫的,可是,各種錯誤,特別是遇到了OLE,只能大面積參考了順便補充一下先代學長的文章#include<cstdio>#include<cstring>#define left l,m,x<<1#define right m+1,r,x<<1|1#define LMT 132090//首先要對集合的各種操作自己手動類比一遍/*********這cov裡面的空分為兩種,一種是真空,一種是用情況的空,真空是0,有情況是-1
做法:這題比ural那題簡單,因為是球,所以離散化時記錄區間邊間點和中間的兩個點就好了。//列SUM組的方法也只適用於,空出的的格子可以不用考慮的情況啊#include<cstdio>#include<cstring>#include<algorithm>#define left l,m,x<<1#define right m+1,r,x<<1|1using namespace std;const int
做法:按高度排序之後,直接映射到數組上計算好了。注意LL 用的要及時,WA了許久..#include<cstdio>#include<cstring>#include<algorithm>#define left l,m,x<<1#define right m+1,r,x<<1|1#define LL __int64const int LMT=160003;using namespace std;int
題意:經過一系列操作之後,求可以看見的顏色數做法:一開始2了用了個數組簡單統計了一下,果斷TLE,所以後來只能想個法子,用節點記錄區間中還有顏色的種類,用位元壓縮即可#include<cstdio>#include<cstring>#define left l,m,x<<1#define right m+1,r,x<<1|1const int LMT=100003;int colo[LMT<<2],ans,L,T;bool
水題一枚...#include<cstdio>#include<cstring>#define left l,m,x<<1#define right m+1,r,x<<1|1#define eps 1e8const int LMT=50002;int hei[LMT<<2],sho[LMT<<2],__hei,__sho;inline int max(int a,int b){return
做法:先統計,後映射到數組上.每一次然a,b-1的地區即可。#include<cstdio>#include<cstring>#include<algorithm>#define left l,m,x<<1#define right m+1,r,x<<1|1const int LMT=35005;const int big=1000000000;using namespace std;int cov[LMT<<2],myx[
做法:求平均值是,上取整下取整要考慮正負數啊,然後更新區間時要不要直接除以2了。#include<cstdio>#include<cstring>#define left l,m,x<<1#define right m+1,r,x<<1|1#define LL long longconst int LMT=30003;LL sum[LMT<<2],num[LMT<<2];bool cov[LMT<<2],tag;
題意:先給定了螞蟻每個等級的成員數量,然後求某隻排名為x的螞蟻的等級。顯然螞蟻的排名按照等級排列,同級的佔有一段連續的地區。做法:瞭解題意後,發現和POJ某題很像#include<cstdio>#include<cstring>#define left l,m,x<<1#define right m+1,r,x<<1|1const int LMT=100003;int have[LMT],cov[LMT<<2];void
第一道這樣的題目,轉自這裡點擊開啟連結只是照抄了一下,然後體味了一下大神的思維,以及自己的不慎#include<cstdio>#include<iostream>#include<cstring>#define left l,m,x<<1#define right m+1,r,x<<1|1#define LMT 50005using namespace std;//一般都是左子樹多一點int
轉自這裡 #include<cstdio>#include<algorithm>#include<cstring>#define LMT 202#define left l,m,x<<1#define right m+1,r,x<<1|1using namespace std;//shit double int 搞錯了struct line{ double h,l,r; int d; line(void){}
題意:夜裡排隊買車票,每個人都有自己的id號。排隊買票時會插隊,輸入n對數字,每對包括了他想插入的位子,和自己的id號,後插入的人會把先插入的人擠下去做法:把先到的人擠下去真心難類比,那麼就倒過來思考。逆序尋找序列對,後查到的要往後排,這個思想我以後要記住了然後建立樹時,每個節點的值為當前的空餘數,然後就可以類比了,類比的時候要小心...#include<cstdio>#include<cstring>#define left l,m,x<<1#define
做法:一開始做的成段更新,有學會了成段更新的一下必要規則#include <iostream>#include <cstdio>#include <cstring>#define left l,m,x<<1#define right m+1,r,x<<1|1#define LL long long#define LMT 100004//成段更新原則:一定要有表現出每一次改變的所有影響//在看題的一開始就要確定使用數值的類型using
做法:抄hh大神的,可是,有些地方自己的小聰明導致了錯誤,記錄一下#include <cstdio>#include <vector>#include <algorithm>#include <cstring>#define left l,m,x<<1#define right m+1,r,x<<1|1#define LMT
做法:hdu的較嚴格,加上while即可#include<cstdio>#include<cstring>#include<stack>#define left l,m,x<<1#define right m+1,r,x<<1|1const int LMT=50005;using namespace std;int