小目標:高考假以內,做完poi2015
和poi2014的一半
怎麼搞?
實際套路也挺簡單的。
你看:l,r。這是n*n的演算法
一般來說1e6 怎麼搞是on *✧⁺˚⁺ପ(๑・ω・)੭ु⁾⁾
但是onlogn 卻必須得跑過
原因是一般來說解決是列舉乙個l 或者是中位數。
但是必須得log 那麼毒瘤卡常數
你用乙個後向星記錄乙個 pre即上乙個為wi 和 last
然後區間更新 pre i +1 ,i +wi
pre(pre)+1 ,pre i -wi
然後查詢到l位置最大值
#includeusing namespace std;
typedef int int;
#define int long long
const int n=1e6+100;
inline void read(int &x)
while(ch>='0'&&ch<='9')
x*=f;
}struct max_queryt[n<<2];
void build(int p,int l,int r)
int mid=(l+r)/2;
build(lc,l,mid);
build(rc,mid+1,r);
} inline void pushup(int p)
inline void pushdown(int p)
} inline void update(int p,int l,int r,int val)
int mid=(t[p].lson+t[p].rson)/2;
pushdown(p);
if(l<=mid) update(lc,l,r,val);
if(midpushup(p);
} inline int query(int p,int l,int r)
pushdown(p);
int mid=(t[p].lson+t[p].rson)/2;
if(l<=mid) ret=max(ret,query(lc,l,r));
if(midreturn ret;
}}t;
int pre[n]={};
int last[n]={};
int a[n]={};
int w[n]={};
int n,m;
int main()
for(int i=1;i<=m;i++)
t.build(1,1,n);
int ans=-1;
for(int i=1;i<=n;i++)
cout<}
省選專練 POI2014 RAJ Rally
又是一道神仙題 太神仙了 第一步 考慮這是有向無環圖,故思考topsort?我真是想不到 由於這是有向無環圖 定義f i 為到達i的最長路徑 g i 為從i出發的最長路徑 故 f u g v 1為最長鏈 用乙個可刪除堆優化一下就好了 includeusing namespace std const ...
省選專練HEOI2015兔子和櫻花
毒瘤貪心。第一他長得太像貪心了。而且下標位置是0 n 1 我最先tmmmp看樣例以為是乙個仙人掌。貪心,每次選最優的,也就是代價最小的。注意刪去乙個兒子,c i 要相對 1 include include include include includeusing namespace std cons...
省選專練SDOI2015約數個數和
然後對於trunc n d 只有根號n個解,跳就完了。include include include include includeusing namespace std define ll long long const int maxn 55000 bool vis 60000 ll prim ...