#include<bits/stdc++.h>using namespace std;int a[100007],f[100007],ans,n;int main(){ cin>>n; for(int i=n;i>=1;--i) scanf("%d",&a[i]); for(int i=1;i<=n;++i)//逆向遍历 if(f[ans]<=a[i])//如果f数组里比较小,把a数组放进f数组,让大的放在ans位置上 f[++ans]…
(https://atcoder.jp/contests/abc134/tasks/abc134_e) 题意:找出最小个数的最长上升子序列 思路:找出最长上升子序列的最小个数,只需要找出每个最小上升子序列的最后一个元素,然后元素个数之和就是最长上升子序列的最小个数 #include <iostream> #include<set> #include<cstdio> #include<algorithm> using namespace std; ; int…
#define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;multiset<long long>mst;long long a[100007];int main(){ long long n; cin>>n; long long x; for(long long i=0;i<n;++i){ cin>>x; a[x]=i; } mst.insert(-1); mst.in…
题目描述 The only difference between the easy and the hard versions is the maximum value of k. You are given an infinite sequence of form "112123123412345--" which consist of blocks of all consecutive positive integers written one after another. The…
D - Handstand Time Limit: 2 sec / Memory Limit: 1024 MB Score : 400400 points Problem Statement NN people are arranged in a row from left to right. You are given a string SS of length NN consisting of 0 and 1, and a positive integer KK. The ii-th per…
#include<bits/stdc++.h>using namespace std;int a[200007];int b[200007];long long dp[200007];long long sum[200007];const long long mod =1e9+7;int main(){    dp[0]=1;    int n;    scanf("%d",&n);    for(int i=1;i<=n;i++)        scanf(…
#define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int n;int a[1007][1007],t[1007],p[1007];queue<int>q[2];//每次把消去的选手扔进队列,避免无法消去的选手被频繁访问,暴力模拟会N^3复杂度,只对新的选手进行遍历大概只有N^2复杂度int main(){ cin>>n; for(int i=1;i<=n;++i) for(…
#include<bits/stdc++.h>using namespace std;string s;char ans[200007][7];char anss[200007][7];int main(){ cin>>s; int n=s.size(); int sta=0; int cnt=1; int flag=0; ans[cnt][0]=s[0]; //把字符串分割成一个字符,两个字符,一个字符,两个字符... //因为前后字符数量不一样,所以肯定不相同.如果这个字符和上…
题意:你需要订阅一些服务,每个服务每天需要花费\(c_i\),要从第\(a_i\)用到第\(b_i\)天,你可以购买会员,会员每天需要花费\(C\),但是这天的服务不用再另花钱了,问你订阅这些服务的最小花费是多少. 题解:对于这种某一段区间的加加减减的问题,我们首先应该考虑的是用差分,我们可以用map来做差分数组,然后遍历map累加差分数组的前缀和,再和\(C\)比较,贡献给答案就可以了. 代码: #include <bits/stdc++.h> #define ll long long #d…
题意:有\(n\)个数,从中选\(k\)个数累乘,求最大的乘积\((mod\ 10^9+7)\). 题解: 1.假如全是负数,并且选奇数个,那么从小到大选. 2.否则,考虑当前状态,假如\(k\)是奇数,那么我们先选一个最大的,然后再选两个最大的正数相乘或者两个负数相乘后最大,每次这样选即可. 代码: int n,k; ll a[N]; ll mp[N]; bool cmp(ll x,ll y){ return abs(x)<abs(y); } int main() { ios::sync_wi…