Сортировать один список и найти LIS в другом. Код C ++ ->
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(pair<int,int> a, pair<int,int> b){
return a.first<b.first;
}
int bridges(vector<pair<int,int> > connect){
int i, j, n=connect.size();
sort(connect.begin(),connect.end(),cmp);
vector<int> lis(n,1);
int m=0;
for(i=0;i<n;i++){
for(j=i-1;j>=0;j--){
if(connect[i].second>connect[i].first)lis[i]=max(lis[i],lis[j]+1);
}
m=max(m,lis[i]);
}
return m;
}
int main(){
int n, i;
cin >> n;
vector<pair<int,int> > a(n);
for(i=0;i<n;i++)cin >> a[i].first >> a[i].second;
cout << bridges(a) <<endl;
return 0;
}
HEAD
- это (прямая или косвенная, т.е. символическая) ссылка на текущую фиксацию. Это фиксация, которую вы проверили в рабочем каталоге (если вы не внесли какие-либо изменения или аналогичные), и это фиксация, поверх которой «git commit» создаст новую. Обычно HEAD
является символической ссылкой на некоторую другую именованную ветвь; эта ветка в настоящее время является извлеченной веткой или текущей веткой. HEAD
также может указывать непосредственно на фиксацию; это состояние называется «отключенной HEAD», и его можно понять как нахождение в безымянной анонимной ветке.
И только @
является ярлыком для HEAD
, поскольку Git 1.8.5
ORIG_HEAD
- это предыдущее состояние HEAD
, установленное командами, которые могут иметь опасное поведение, чтобы их можно было легко восстановить.HEAD @ {1} примерно эквивалентен ORIG_HEAD
( HEAD @ {1}
всегда является последним значением HEAD
, ORIG_HEAD
] - последнее значение HEAD
перед опасной операцией).
Для получения дополнительной информации прочтите git (1) manpage , Руководство пользователя Git , Книга сообщества Git и Глоссарий Git
Насколько я понимаю, HEAD указывает на текущую ветвь, а ORIG_HEAD используется для хранения предыдущей HEAD перед выполнением «опасных» операций.
Например, git-rebase и git-am записывают исходный конец ветки, прежде чем вносить какие-либо изменения.
Из git reset
"pull" или "merge" всегда оставляет исходную вершину текущей ветви в
ORIG_HEAD
.
git reset --hard ORIG_HEAD
Жесткий сброс на он возвращает ваш индексный файл и рабочее дерево в это состояние и сбрасывает кончик ветки до этой фиксации.
git reset --merge ORIG_HEAD
Проверив результат слияния, вы можете обнаружить, что изменение в другой ветви неудовлетворительное. Выполнение «
git reset --hard ORIG_HEAD
» позволит вам вернуться туда, где вы были, но отменит ваши локальные изменения, которые вам не нужны. «git reset --merge
» сохраняет ваши локальные изменения.
Перед применением каких-либо исправлений ORIG_HEAD устанавливается в конец текущей ветви.
Это полезно, если у вас есть проблемы с несколькими коммитами, например, запуск 'git am
' в неправильной ветке или ошибка в коммитах, которую легче исправить, изменив почтовый ящик (например, + ошибки в поле «От : "строки).Кроме того, слияние всегда устанавливает '
.git / ORIG_HEAD
' в исходное состояние HEAD, поэтому проблемное слияние можно удалить с помощью 'git reset ORIG_HEAD
'.
Примечание: из здесь
HEAD - движущийся указатель. Иногда это означает текущую ветвь, иногда нет.
Итак, HEAD НЕ уже везде синоним «текущей ветви».
HEAD означает «текущая» везде ] в git, но это не обязательно означает «текущую ветвь» (т.е. отсоединенную HEAD). Это коммит «
git commit
», который строится поверх, и «git diff --cached
» и «git status
» в сравнении с.
Это означает, что текущая ветка только в очень ограниченном контексте (именно тогда, когда нам нужна ветка имя, над которым нужно работать - сброс и расширение кончика ветки с помощью фиксации / перебазирования / и т. д.).Reflog - это средство, позволяющее вернуться в прошлое, и машины времени имеют интересное взаимодействие с понятием «текущий».
HEAD @ {5.minutes.ago}
может означать «разыменование HEAD symref, чтобы узнать, в какой ветке мы находимся ПРЯМО СЕЙЧАС, а затем выяснить, где кончик этой ветки был 5 минут назад».
В качестве альтернативы это может означать «что это за коммит, который я бы назвал HEAD 5. минут назад, например, если я тогда сделал «git show HEAD».
git1.8.4 (июль 2013 г.) вводит вводит новую нотацию!
(на самом деле, это будет для 1.8.5 или 1.9, четвертый квартал 2013: повторно введено с commit 9ba89f4 )
Вместо того, чтобы вводить четыре заглавные буквы «
HEAD
», вы можете сказать «@
"сейчас,
например, «git log @
».
См. commit cdfd948
Ввод «
HEAD
» утомителен, особенно когда мы можем использовать «@
] ».Причина выбора«
@
»заключается в том, что это естественно следует из синтаксисаref @ op
(например,HEAD @{u}
), за исключением того, что у нас нет ни ссылки, ни операции, а когда у нас их нет, имеет смысл предположить «HEAD
».Итак, теперь мы можем использовать '
git show @ ~ 1
' и все прочее.До сих пор '
@
' было допустимым именем, но оно противоречит этой идее, поэтому давайте сделаем это недействительным. Вероятно, очень немногие люди, если таковые имеются, использовали это имя.
Сообщение в блоге в период 1.8.4-rc3 (14 августа 2013 г.) объявило, что эта функция была отменена и отложена (Спасибо Cupcake для хедз-ап ).
Опять же, он снова вводится с commit 9ba89f4 (сентябрь 2013 г.).
См. commit 2c2b664 :
@
для HEAD
"Это отменяет фиксацию cdfd948 , поскольку это не относится только к«
@
»(и формам с модификаторами вроде@ {u }
применяется к нему), но также влияет, например, на "refs / heads / @ / foo
", чего не должно быть.Основная идея предоставления короткой позиции может быть хорошей , и эту тему можно будет повторить позже, но давайте вернемся, чтобы не затрагивать существующие варианты использования на данный момент для предстоящего выпуска.