No.1最长连续上升子序列
主要想说一下,昨天写的最长上升序列是动态规划(一般只要求写出结果),,如果+连续就变成双指针了(可能要求把子列输出)
emmm 昨天写的连续最大乘积是动态规划
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;cin>>n;
int a[110];
for(int i=0;i<n;i++){
cin>>a[i];
}
int i=0,j=1,l=1;
int t_i=0,t_l=1;
while(j<n){
if(a[j-1]<a[j]){
j++;
l++;
}
else{
if(l>t_l){
t_l=l;
t_i=i;
}
i=j;
j++;
l=1;
}
}
for(int k=0;k<t_l;k++){
cout<<a[t_i+k]<<" ";
}
return 0;
}
No.2
1238. 日志统计
#include<bits/stdc++.h>
using namespace std;
vector<int>a[100100];
int n,d,k,x,y;
bool judge(int x){
int len=a[x].size();
if(len<k) return false;//如果赞数就不够k肯定不对啦
int l=0,r=0,sum=0;
sort(a[x].begin(),a[x].end());
while(l<=r&&r<len){
sum++;
if(sum>=k){
if(a[x][r]-a[x][l]<d) return true;
else{
sum--;
l++;
}
}
r++;
}
return false;
}
int main(){
cin>>n>>d>>k;
for(int i=0;i<n;i++){
cin>>x>>y;
a[y].push_back(x);
}
for(int i=0;i<100100;i++){
if(judge(i)) cout<<i<<endl;
}
return 0;
}
No.3
1240. 完全二叉树的权值
#include<bits/stdc++.h>
using namespace std;
long long a[100100];
int main(){
int n;cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int deepth=1,res=1;
long long max=0;//
long long sum=0;
//就是从2^(n-1)--->2^n-1连续相加 比较
for(int i=1;i<=n;i=i*2){
for(int j=i;j<=i*2-1&&j<=n;j++){
sum+=a[j];//重要的一点,&&j<=n完全二叉树不一定到尾
}
if(sum>max){
max=sum;
res=deepth;
}
deepth++;
sum=0;
}
cout<<res;
return 0;
}