老師想知道從某某同學當中,分數最高的是多少,現在請你程式設計模擬老師的詢問。當然,老師有時候需要更新某位同學的成績.
思路:①區間最大值,點更新。
這裡是最簡單的,其實還有區間求和,區間最大值,區間最小值,點更新,區間更新。
可以用線段樹、樹狀陣列、rmq
①這裡只簡單說明一下區間最大值和點更新,剩餘的放在下乙個篇詳細介紹。
②就用線段樹吧,n個資料,就是n個葉子節點存放資料。父節點表示範圍的最大值,每次修改之後需要向上更新。
③如何建樹?
線段樹,build(1,1,n)遞迴建樹,當節點的l==r的時候,遞迴結束,葉子節點(這裡的l和r不是左右子樹而是左右覆蓋範圍),依次得到的葉子節點肯定是從左到右的(8-->9-->5-->6-->7)。l和r可以表示輸入資料的下標,就是覆蓋範圍嘛。更新點的值比更新區間的值要簡單,查到點只需要向上更新即可。
**:
開發乙個簡單錯誤記錄功能小模組,能夠記錄出錯的**所在的檔名稱和行號。#include#define n 30005
struct nodep[n*2];
int a[n]; //輸入資料
int max(int a,int b)
void build(int o,int l,int r)
int mid=(l+r)/2;
build(o*2,l,mid);
build(o*2+1,mid+1,r);
p[o].value=max(p[o*2].value,p[o*2+1].value);
}//從根節點開始查
int find(int o,int l,int r)
//左兒子的右覆蓋範圍 小於 l (在右子樹)
if(l>p[o*2].r) return find(o*2+1,l,r);
//右兒子的左覆蓋範圍 大於 r (在左子樹)
else if(rx2)
printf("%d\n",find(1,x1,x2));
}else}}
return 0;
}
處理:1.記錄最多8條錯誤記錄,對相同的錯誤記錄(即檔名稱和行號完全匹配)只記錄一條,錯誤計數增加;(檔案所在的目錄不同,檔名和行號相同也要合併)
2.超過16個字元的檔名稱,只記錄檔案的最後有效16個字元;(如果檔名不同,而只是檔名的後16個字元和行號相同,也不要合併)
3.輸入的檔案可能帶路徑,記錄檔名稱不能帶路徑
思路
①首先字串處理,有乙個轉義符誤區,得到檔名和行數。然後定義乙個map就行相同檔名和行數進行統計,map插入會改變輸入順序,這是第二個誤區,需要乙個輔助記錄輸入順序。最後map轉化結構題陣列,進行結構體排序。
②結構體排序可以用sort和qsort,但是在本案例中qsort不能通過,我也不知什麼個情況,注意cmp函式的返回會值(二者不同),已及決定公升降序排序(剛好相反)。
③第一次提交答案錯誤,給出輸出是中間是空格,其實不是,就是乙個一行(坑了好久)。
**
#include#include#include#include#include#include#include#include#includeusing namespace std;
mapflag;
int counts=0;
struct node;
//qsort,返回值1和-1代表真假
/*int cmp(const void *a,const void *b)
return (*(struct node *)a).y > (*(struct node *)b).y ? -1 : 1;
}*///sort返回值1和0代表真假
int cmp(const node &a,const node &b)
//並且sort和qsort剛好是相反的
//sort 真是由大到小,qsort假是由大到小
int main()
sort(p,p+counts,cmp); // qsort(p, counts, sizeof(p[0]),cmp);
int num=0;
for(int i=0;i=0;l--)
if(l<=16) else }}
}
華為2016校園招聘上機筆試題
華為2016校園招聘上機筆試題 撲克牌大小 已通過測試,通過。思路 主要是將比較的左右牌,進行區分開來 首先將左右的牌轉化為字串,10 佔兩個字串,需要特殊處理 將 10 轉化為 1 這樣可以通過左右兩邊字元的個數多少進行區分 include include 定義輸出的字元陣列 char print...
華為2016校園招聘上機筆試題
踩的坑 q 1 5 在測試樣例中有可能 a 1 b 5,而題目樣例並沒有體現這一點 用法記錄 vector chengji 最大值的求法 踩的坑 要寫成 用法記錄 字元string的查詢 rfind find 字元的erase 傳參同substr stable sort 記錄最多8條錯誤記錄 合併錯...
華為2013校園招聘上機筆試題
上機時間兩小時,3道題 1 字串轉換 問題描述 將輸入的字串 字串僅包含小寫字母 a 到 z 按照如下規則,迴圈轉換後輸出 a b,b c,y z,z a 若輸入的字串連續出現兩個字母相同時,後乙個字母需要連續轉換2次。例如 aa 轉換為 bc,zz 轉換為 ab 當連續相同字母超過兩個時,第三個出...