1.Team Queue
牛客竞赛-Team Queue
AcWing-132. 小组队列
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list>
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=1010;
map<int,int>gr;
queue<int>q[N];
queue<int>tot;
void solve()
{
int T,num,_=0,x;
while(cin>>T){
if(T==0) break;
cout<<"Scenario #"<<++_<<endl;
rep(i,0,T){
queue<int>().swap(q[i]);
cin>>num;
while(num--) cin>>x,gr[x]=i;
}
string s;
while(cin>>s){
if(s=="STOP") break;
else if(s=="ENQUEUE"){
cin>>x;
int k=gr[x];
if(q[k].size()==0) tot.push(k);
q[k].push(x);
}
else{
cout<<q[tot.front()].front()<<endl;
q[tot.front()].pop();
if(q[tot.front()].size()==0) tot.pop();
}
}
cout<<endl;
gr.clear();
queue<int>().swap(tot);
}
}
int main()
{
// #ifndef ONLINE_JUDGE
// freopen("title.in","r",stdin);
// freopen("title.out","w",stdout);
// #endif
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
2.蚯蚓
AcWing-133. 蚯蚓
牛客竞赛-[NOIP2016]蚯蚓
[NOIP2016 提高组] 蚯蚓 - 洛谷
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list>
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define all(x) (x).begin(),(x).end()
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=200010;
bool cmp(int a,int b)
{
return a>b;
}
queue<LL>q[5];
void solve()
{
int n,m,c,u,v,t;
cin>>n>>m>>c>>u>>v>>t;
vector<int>vc(n,0);
rep(i,0,n) cin>>vc[i];
sort(all(vc),cmp);
for(auto i:vc) q[1].push(i);
int del=0;
vector<LL>res1,res2;
rep(i,0,m){
LL mx=-1e18;
int k=0;
rep(j,1,4) if(q[j].size()&&q[j].front()>mx) mx=q[j].front(),k=j;
q[k].pop();
mx+=del;
res1.push_back(mx);
q[2].push(mx*u/v-del-c),q[3].push(mx-mx*u/v-del-c);
del+=c;
}
rep(i,1,4){
while(q[i].size()) res2.push_back(q[i].front()+del),q[i].pop();
}
sort(all(res2),cmp);
rep(i,0,res1.size()) if((i+1)%t==0) cout<<res1[i]<<" ";
cout<<endl;
rep(i,0,res2.size()) if((i+1)%t==0) cout<<res2[i]<<" ";
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
3.双端队列
134. 双端队列 - AcWing题库
牛客竞赛-双端队列
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list>
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define all(x) (x).begin(),(x).end()
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=200010;
pii p[N];
void solve()
{
int n;
cin>>n;
rep(i,0,n) cin>>p[i].fi,p[i].se=i;
sort(p,p+n);
int ans=1,lst=1e9,d=-1;
rep(i,0,n){
int j=i;
while(j<n&&p[j].fi==p[i].fi) ++j;
int mi=p[i].se,mx=p[j-1].se;
if(d==-1){
if(lst>mx) lst=mi;
else d=1,lst=mx;
}else{
if(lst<mi) lst=mx;
else ++ans,d=-1,lst=mi;
}
i=j-1;
}
cout<<ans<<endl;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
4.最大子序和
135. 最大子序和 - AcWing题库
牛客竞赛-最大子序和
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include<bitset>
#include<list>
#include <algorithm>
#define pii pair<int,int>
#define pll pair<LL,LL>
#define pil pair<int,LL>
#define pli pair<LL,int>
#define pdd pair<db,db>
#define se second
#define fi first
#define endl '\n'
#define rep(i,a,b) for (register int i=a;i<b;++i)
#define per(i,a,b) for (register int i=a;i>b;--i)
#define MEM(a,x) memset(a,x,sizeof(a))
#define M(x) ((x)%MOD)
#define all(x) (x).begin(),(x).end()
#define db double
#define eps 1e-9
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
const int MOD=9901;
const int N=300010;
int s[N],q[N];
void solve()
{
int n,m;
cin>>n>>m;
rep(i,1,n+1) cin>>s[i],s[i]+=s[i-1];
int ans=-2e9,hh=0,tt=0;
rep(i,1,n+1){
if(hh<=tt&&q[hh]<i-m) ++hh;
if(ans<s[i]-s[q[hh]]) ans=s[i]-s[q[hh]];
while(hh<=tt&&s[q[tt]]>=s[i]) --tt;
q[++tt]=i;
}
cout<<ans;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}