2018 icpc南京網路賽G 線段樹

2021-08-26 23:57:10 字數 1169 閱讀 6446

思路:因為只有1e5的資料。我們可以模擬一下所有情況全算出來,把答案存下來即可。但會一遍一遍的遍歷超時,我們可以優化遍歷的方式,因為只有1e5的房間,我們每次找的房間都是小於當前新燈泡數且最前面的房間。這個查詢用一顆線段樹既可以解決。

我們每次找到乙個滿足的房間就讓當前燈泡是減去這個房間的燈泡數,然後讓當前房間的燈泡數設成無窮大,更新一下線段樹即可。

#include #include #include #include #include #define maxn 1005

#define inf 0x3f3f3f3f

using namespace std;

typedef long long ll;

int a[100005];

struct nodec[400005];

int cnt,n,m;

void build(int l,int r,int rt)

int mid=(l+r)>>1;

build(l,mid,rt<<1);

build(mid+1,r,rt<<1|1);

c[rt].val=min(c[rt<<1].val,c[rt<<1|1].val);

}int now;

int query(int l,int r,int rt,int val)

int mid=(l+r)>>1;

int ans=0;

if(c[rt<<1].val<=val)

else if(c[rt<<1|1].val<=val)

c[rt].val=min(c[rt<<1].val,c[rt<<1|1].val);

return ans;

}int ans1[1000007],ans2[1000007];

int main()

build(1,n,1);

int q;scanf("%d",&q);

int i=1;

int qop=0x3f3f3f3f;

while(cnt!=n&&i<=100005)

if(cnt==n) qop=i;

ans1[i]=op+ans1[i-1];ans2[i]=now;

i++;now+=m;

} while(q--)

return 0;

}

2018 icpc 南京網路賽

題目 鏈結 a.an olympian math problem 輸出n 1即可 女朋友猜的 includeusing namespace std define ll long long ll fac 103 int main for int i 1 i m i ll ans 0 for int i...

2018 ICPC 南京網路賽 skr

題意 給出乙個字串,求它的所有回文子串轉化成數字的和,對1e9 7取模。題解 先上manacher,然後列舉每個點,按照半徑從大到小的順序列舉回文串,遇到出現過的就break,統計答案即可。注意的是,判重時只能用pb ds中的gp hash table,unordered map會t,同時需要兩個字...

2018 icpc南京賽區網路賽 J題 附模板

求前1 n每個數的分解的非平方因子數乘積方式的和 用修改的線性篩做 a i 表示數i的分解方法數,對每個數多試幾組資料可以發現 1.質數的分解方法數始終為2 2.合數的分解方法數為其兩因子數的分解方法數的乘積 若該合數為平方數,則分解方法數要除4 若該合數的其中乙個因子是n次方數 n 3 則分解方法...