#include<bits/stdc++.h>usingnamespace std;constint N =1e4+10;structL{int address;int len;}link[N];int sum[N];intmain(){int n,k;int total =0;
cin >> n >> k;for(int i =0; i < n ; i ++){
cin >> link[i].address >> link[i].len;
total+=link[i].len;}
sum[0]= link[0].len-1;for(int i =1; i < n ; i++) sum[i]= sum[i-1]+ link[i].len;
total -=1;int q;int cnt =1;for(int i =0; i < k ; i ++){
cin >> q;if(q>total)puts("Illegal Access");else{int l =0,r=n-1;while(l<r){int mid =(l+r)/2;if(sum[mid]< q) l = mid+1;else r = mid;}if(l==0){int diff = link[l].address +4*q;
cout<<diff<<endl;}else{int diff = link[l].address +4*(q-1-sum[l-1]);
cout<<diff<<endl;}
cnt =max(cnt,l+1);}}
cout<<cnt;return0;}
7-2 Stack of Hats
#include<bits/stdc++.h>usingnamespace std;constint N =1e4+10;
unordered_map<int,int> ord;// 表示帽子的大小顺序
unordered_map<int,int> pos;// 表示人先后到来顺序int a[N];int b[N];int n;intmain(){
cin >> n;for(int i =1; i <= n ; i ++){
cin >> a[i];
b[i]= a[i];}sort(a+1,a+n+1,greater<int>());//从大到小排序for(int i =1; i <= n ; i ++) ord[a[i]]= i;//记录帽子大小顺序for(int i =1; i <= n ; i ++){
cin >> a[i];
pos[a[i]]= i;}sort(a+1,a+n+1,greater<int>());//从大到小排序for(int i = n ; i >=2; i--){
cout<<pos[a[ord[b[i]]]]<<" ";}
cout<<pos[a[ord[b[1]]]];return0;}
7-3 Playground Exploration
#include<bits/stdc++.h>usingnamespace std;constint N =110;bool st[N];
vector<int> g[N];int n,m;intdfs(int u){int len =1;for(int i =0; i < g[u].size(); i ++){if(!st[g[u][i]]){// cout<<g[u][i]<<" ";
st[g[u][i]]=true;
len = len +dfs(g[u][i]);break;}}return len;}intmain(){
cin >> n >> m;for(int i =1; i <= m ; i ++){int a,b;
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);}for(int i =1; i <= n ; i ++){sort(g[i].begin(),g[i].end());}int cnt =0;int idx =0;for(int i =1; i <= n ; i ++){memset(st,0,sizeof st);
st[i]=true;int len =dfs(i);if(len > cnt){
idx = i;
cnt = len;}}
cout<<idx<<" "<<cnt;return0;}
7-4 Sorted Cartesian Tree
#include<bits/stdc++.h>usingnamespace std;typedef pair<int,int> PII;constint N =35;
PII a[N];
unordered_map<int,int> le,rt;//记录左右子树int n;
vector<PII> ans;boolcmp(PII a,PII b){return a.first < b.first;}intbuild(int l,int r){int minn = a[l].second;//priority值进行比较int root = l;if(l>r)return-1;for(int i = l; i <= r; i ++){if(a[i].second<minn){
root = i;
minn = a[i].second;}}if( root > l ) le[root]=build(l,root-1);if( root < r ) rt[root]=build(root+1,r);return root;}voidbfs(int root){
queue<int> q;
q.push(root);while(q.size()){int t = q.front();
q.pop();
PII now = a[t];
ans.push_back(now);if(le.count(t)) q.push(le[t]);if(rt.count(t)) q.push(rt[t]);}}intmain(){
cin >> n;for(int i =1; i <= n ; i ++){
cin >> a[i].first >> a[i].second;}sort(a+1,a+n+1,cmp);//根据Key值排序,得到中序遍历序列int root =build(1,n);//建树bfs(root);for(int i =0; i < ans.size()-1; i ++) cout<<ans[i].first<<" ";
cout<<ans[int(ans.size()-1)].first<<"\n";for(int i =0; i < ans.size()-1; i ++) cout<<ans[i].second<<" ";
cout<<ans[int(ans.size()-1)].second;return0;}
7-1Arrays and Linked Lists#include<bits/stdc++.h>using namespace std;const int N = 1e4+10;struct L{ int address; int len;}link[N];int sum[N];int main(){ int n,k; int total = 0; cin >> n >> k; for(int i = 0