Codeforces 1042 D Petya and Array
1.題意
給出一個數組,元素有正有負有0,問其區間和大於K的子區間的個數。
2.解法
若直接求所有區間和,有n^2個狀態,顯然是要直接略過一些狀態。 對這類問題,解決方法一般是排序——利用單調性,在處理到某個狀態時不和要求,則其後的狀態也不合要求,continue。
對於本題,有個技巧:我們運用二分。對於[l,r]之間的子區間,我們只考慮跨越區間中點mid的子區間。 首先,我們要從mid開始向左構造字尾和suf,向右構造字首和pre,進而通過任意的suf+pre產生一個區間和。 然後,我們把suf和pre們按照升序排序。 道理是很清晰的,既然任一suf+任一pre都能產生一個經過mid的子區間的區間和,我們必然希望讓suf和pre都儘可能小,直到suf+pre達到閾值K——那餘下的suf+pre也必然大於K,便不做考慮。
核心思路就是利用單調性忽略部分狀態。
3.程式碼
注意有數字超過INT_MAX,要用longlong。
相關推薦
Codeforces 1042 D Petya and Array
1.題意 給出一個數組,元素有正有負有0,問其區間和大於K的子區間的個數。 2.解法 若直接求所有區間和,有n^2個狀態,顯然是要直接略過一些狀態。 對這類問題,解決方法一般是排序——利用單調性,在處理到某個狀態時不和要求,則其後的狀態也不合要求,continu
1042.D Petya and Array 字首 + 樹狀陣列
11.19.2018 1042.D Petya and ArrayNew Point: 字首 + 樹狀陣列 :樹狀陣列逐個維護字首個數 Describe: 給你一個陣列,一個標記數,問你有多少區間[l,r]使得這個區間的和小於這個標記數值 Solution: 沒能想到 字首陣列
1042.D Petya and Array 前綴 + 樹狀數組
clas tree 快速 tdi ons str while har 快速查詢 11.19.2018 1042.D Petya and ArrayNew Point: 前綴 + 樹狀數組 :樹狀數組逐個維護前綴個數 Describe: 給你一個數組,一個標記數,問你有多少區
Codeforces Round #510 (Div. 2), problem (D) Petya and Array 分治
本題如果採用兩層for迴圈遍歷每個l和r,時間複雜度為O(n2),將會超時。所以可以採用分治的演算法,將陣列二分遞迴,完成一個分支之後將此次l和r之間的數進行排序,目的是能以O(n)的時間複雜度統計出此分支符合要求的個數。 ac程式碼: #include <bits/std
Codeforces Round #510 (Div. 2) D. Petya and Array(離散化+反向樹狀陣列)
http://codeforces.com/contest/1042/problem/D 題意 給一個數組n個元素,求有多少個連續的子序列的和<t (1<=n<=200000,abs(a[i])<=1e9) 思路 將公式轉化以下,sum[r]-sum[l-1]&
Codeforces Round #510 (Div. 2) D. Petya and Array (樹狀陣列)
題意:求所有[l,r][ l , r ][l,r]區間和小於TTT的這樣的區間數量。 思路:從lll 到rrr的和小於TTT,即sum(r)−sum(l−1)<Tsum(r)-sum(l
Codeforces Round #510 (Div. 2) D. Petya and Array(樹狀數組)
題解 class 就是 不同的 and std tps query col D. Petya and Array 題目鏈接:https://codeforces.com/contest/1042/problem/D 題意: 給出n個數,問一共有多少個區間,滿足區間和小
Codeforces Round #374 (Div. 2)-D Maxim and Array
clu pan air rst main flag lap and class 題目大意:給你n個數,最多有k次操作,每次操作可以將一個任意一個數加上x或者減去x,問你經過k次操作 之後,滿足n個數乘積最小的改變後的序列。 思路:我們先考慮原序列由奇數個負數,那麽我們只
Petya and Array CodeForces - 1042D (樹狀數組)
byte get .org sin posit width cli 而不是 class D. Petya and Array time limit per test 2 seconds memory limit per test 256 megabytes inp
Petya and Array CodeForces - 1042D
ios 個數 arr clas tdi 有一個 size begin 如果 很不錯的一道題 給你一個長度為n的數組,問共有多少個區間滿足區間之和小於給定的數t 這種題一般做法肯定是枚舉,固定左端點枚舉右端點,枚舉的過程需要優化,否則就是n方 這道題我先求一個前綴和,然後逆著
codeforces D. Levko and Array(二分加dp) 挺好的一個題
Note In the first sample Levko can change the second and fourth elements and get array: 4, 4, 4, 4, 4. In the third sample he can get array: 1, 2, 3, 4
codeforces 785D D. Anton and School - 2
style ems its com -1 return 他能 har pow 題目鏈接:http://codeforces.com/problemset/problem/785/D 題意:給你一個只包含‘(‘和‘)‘的字符串,然後問他的子序列中有多少滿足前一半是左括號,後一
CodeForces 385 D.Bear and Floodlight 狀壓DP
狀態 isp end log opened closed 位置 lag *** 枚舉燈的所有可能狀態(亮或者不亮)(1<<20)最多可能的情況有1048576種 dp【i】表示 i 狀態時燈所能照射到的最遠距離(i 的二進制中如果第j位為0,則表示第j個燈不亮,
Codeforces 686 D - Kay and Snowflake
turn main return ret href 沒有 std 連線 div D - Kay and Snowflake 思路: 樹的重心 利用重心的一個推論,樹的重心必定在子樹重心的連線上。 然後利用重心的性質,可知,如果有一顆子樹的大小超過整棵樹的大小的1/2
CodeForces 979 D Kuro and GCD and XOR and SUM
src void out 個數 pac con c++ fin HR Kuro and GCD and XOR and SUM 題意:給你一個空數組。 然後有2個操作, 1是往這個數組裏面插入某個值, 2.給你一個x, k, s。要求在數組中找到一個v,使得k|gcd(x,
codeforces 914 D Bash and a Tough Math Puzzle
splay col cst hide spl hang sin algorithm d+ 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #inclu
Codeforces 841 D - Leha and another game about graph
ora second 一個 unsigned txt code cto efi sizeof D - Leha and another game about graph 思路:首先,如果所有點的度數加起來是奇數,且沒有-1,那麽是不可以的。 其他情況都可以構造,我們先
CF1042D Petya and Array
eof nbsp begin str cto pos main 逆序對數 void 思路: 離散化+樹狀數組(或權值線段樹)。bit數組一定要開夠。和求逆序對數量很像。 實現: 1 #include <bits/stdc++.h> 2 using name
Codeforces 388 D. Fox and Perfect Sets
clu turn char 解題思路 href span void 題目 long $ >Codeforces \space 388 D. ?Fox?and?Perfect?Sets<$ 題目大意 : 定義一個完美的集合 \(S\) ,當且僅當 \(S\)
Codeforces 455 D. Serega and Fun
stat ++ span 兩種 program long long main osi stdin $ >Codeforces \space 455 D.?Serega?and?Fun<$ 題目大意 : 你有一個長度為 \(n\) 的序列,要支持兩種操作 給出