Jie Feng
BAN USER#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> digits;
if (n <= 0) return -1;
else{
while(n){
digits.push_back(n%10);
n/=10;
}
reverse(digits.begin(), digits.end());
if (digits.size() == 1) return -1;
int i;
for (i = digits.size()-2; i >= 0; i--){
if (digits[i] < digits[i+1]){
int j = i+1;
while(j < digits.size() && digits[j] > digits[i]) j++;
j--;
swap(digits[i], digits[j]);
sort(digits.begin()+i+1, digits.end());
break;
}
}
if (i == -1) return -1;
else{
for (int i = 0; i < digits.size(); i++)
cout << digits[i];
cout << endl;
}
}
}
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> digits;
if (n <= 0) return -1;
else{
while(n){
digits.push_back(n%10);
n/=10;
}
reverse(digits.begin(), digits.end());
if (digits.size() == 1) return -1;
int i;
for (i = digits.size()-2; i >= 0; i--){
if (digits[i] < digits[i+1]){
int j = i+1;
while(j < digits.size() && digits[j] > digits[i]) j++;
j--;
swap(digits[i], digits[j]);
sort(digits.begin()+i+1, digits.end());
break;
}
}
if (i == -1) return -1;
else{
for (int i = 0; i < digits.size(); i++)
cout << digits[i];
cout << endl;
}
}
}
int min_seq_larger_than_sum(vector<int> &a, int sum){
int L = 0, R = 0, tempSum = a[0], minSeq = INT_MAX;
while(R < a.size()){
if (tempSum > sum){
minSeq = min(R-L+1, minSeq);
tempSum -= a[L];
L++;
} else{
R++;
if (R < a.size()){
tempSum += a[R];
}else break;
}
}
return (minSeq == INT_MAX? -1: minSeq);
}
6. from i + 1 to j - 1, add each count[...] by 1, this operation is O(log(n)) too.
- Jie Feng June 07, 2014This step might not be O(log(n)), pls think about the case where each segment is the same.
Jie