題目速遞:
題意:原始陣列a,f[i]定義為以a[i]結尾的最長上公升子串行的長度。現a陣列遺失,已知l[i]<=a[i]<=r[i],要求還原a陣列,當答案有多個時,輸出其中任意乙個即可。
題解:假定下標i,j:i=a[j];若f[i]+1==f[j],則a[i]注意:若對於j,前面存在不止乙個的下標i,使得f[i]+1==f[j],那麼只要其中最近的那個的ans值+1再更新到ans[j]裡即可【忽略了「前面」和「最近」然後wa了幾次】。因為只要在j之前存在乙個滿足條件i即可(前繼存在即可)。開始讓最遠(即最前)的那個i的ans來更新,因為下意識就想讓a[j]前面所有使得f[i]+1==f[j]的i都可以成為其前繼。
先處理f值相同的,之後再按順序處理f值不同的。
**:ps:**中a陣列是題目的f陣列,ans陣列是題目的a陣列。
#include#include#include#include#include#include#includeusing namespace std;
#define ll long long
const int maxn=1e5+6;
int l[maxn],r[maxn];
int ans[maxn];
int tmp[maxn];
int a[maxn];
int main()
for(int i=1;i<=n;i++)
memset(tmp,-1,sizeof(tmp));
for(int i=n;i>=1;i--)
memset(tmp,-1,sizeof(tmp));
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)
cout<<"\n";
}}
CSUST 08 03 組隊訓練
a zero array gym 101853a 題意 兩個操作,第乙個操作單點更新。第二個操作是選乙個非0數,所有非0數減去這個數,問最少多少次這樣的操作可以把所有數字變成0.思路 一開始還以為是線段樹 隊友bb待修改莫隊 因為有單點更新,有區間相減。但是仔細理解題目,會發現乙個推理的的過程 不考...
CSUST2019 08 05組隊訓練
a multiplication dilemma b updating the tree c shortest path d wooden fence 簽到題e stupid submissions f i m bored g minimax h beautiful substrings i sec...
130804組隊練習賽ZOJ校賽
a.ribbon gymnastics 題目要求四個點作圓,且圓與圓之間不能相交的半徑之和的最大值。我當時想法很簡單,只要兩圓相切,它們的半徑之和一定最大,但是要保證不能相交的話就只能取兩兩個點間距離和最短的作為半徑和最大的。到現在也不是非常清楚為什麼可以a,我們帶錯節奏了。include incl...