怎样做php网站,网页游戏排行榜前十名网络游戏这you,个人养老金查询,软文案例短篇1. CF558E A Simple Task 题意#xff1a; 给定由小写字母组成的字符串 \(s\) 每一次操作如下#xff1a; \(opt0\) #xff1a;将 \([l,r]\) 降序排序 \(opt1\) #xff1a;将 \([l,r]\) 升序排序 输出最终字符串 题解#xff1a; 大致思想为#xff0c;建 \(26\) 棵线… 1. CF558E A Simple Task 题意 给定由小写字母组成的字符串 \(s\) 每一次操作如下 \(opt0\) 将 \([l,r]\) 降序排序 \(opt1\) 将 \([l,r]\) 升序排序 输出最终字符串 题解 大致思想为建 \(26\) 棵线段树代表每一种字母。 操作区间查询出每一种字母的个数记为 \(cnt[c]\) 。 排序按照 从 \(a\) 至 \(z\) 或 从 \(z\) 至 \(a\) 依次向后覆盖 \(cnt[i]\) 个位置 。 输出答案对于每一位枚举 \([a,z]\) 找出覆盖这一位的字母 。 代码 #includebits/stdc.h
using namespace std;
#define Maxn 100005
#define Maxc 27
int n,m;
struct Tree
{int sum,ch_laz;
}tree[Maxc][Maxn2];
int cnt[Maxc];
void build(int opt,int p,int nl,int nr)
{tree[opt][p].ch_laz-1;if(nlnr) return;int mid(nlnr)1;if(midnl) build(opt,p1,nl,mid);if(midnr) build(opt,p1|1,mid1,nr);
}
void pushdown(int opt,int p,int nl,int nr)
{if(tree[opt][p].ch_laz-1) return;int mid(nlnr)1;tree[opt][p1].sum(mid-nl1)*tree[opt][p].ch_laz;tree[opt][p1|1].sum(nr-mid)*tree[opt][p].ch_laz;tree[opt][p1].ch_laztree[opt][p1|1].ch_laztree[opt][p].ch_laz;tree[opt][p].ch_laz-1;
}
void pushup(int opt,int p)
{tree[opt][p].sumtree[opt][p1].sumtree[opt][p1|1].sum;
}
void change(int opt,int p,int nl,int nr,int l,int r,int x)
{if(nll nrr){tree[opt][p].sum(nr-nl1)*x;tree[opt][p].ch_lazx;return;}pushdown(opt,p,nl,nr);int mid(nlnr)1;if(midl) change(opt,p1,nl,mid,l,r,x);if(midr) change(opt,p1|1,mid1,nr,l,r,x);pushup(opt,p);
}
int query(int opt,int p,int nl,int nr,int l,int r)
{if(nll nrr) return tree[opt][p].sum;pushdown(opt,p,nl,nr);int mid(nlnr)1,ret0;if(midl) retquery(opt,p1,nl,mid,l,r);if(midr) retquery(opt,p1|1,mid1,nr,l,r);pushup(opt,p);return ret;
}
int main()
{//freopen(.in,r,stdin);//freopen(.out,w,stdout);cinnm;for(int i0;i26;i) build(i,1,1,n);char x;for(int i1;in;i) cinx,change(x-a,1,1,n,i,i,1);for(int i1,l,r,k;im;i){cinlrk;memset(cnt,0,sizeof(cnt));if(k){for(int i0;i26;i) cnt[i]query(i,1,1,n,l,r),change(i,1,1,n,l,r,0);for(int i0,posl;i26;i) if(cnt[i]) change(i,1,1,n,pos,poscnt[i]-1,1),poscnt[i];}else{for(int i25;i0;i--) cnt[i]query(i,1,1,n,l,r),change(i,1,1,n,l,r,0);for(int i25,posl;i0;i--) if(cnt[i]) change(i,1,1,n,pos,poscnt[i]-1,1),poscnt[i];}}for(int i1;in;i) for(int j0;j26;j)if(query(j,1,1,n,i,i)) { printf(%c,ja); break; }printf(\n);//fclose(stdin);//fclose(stdout);return 0;
} 2. P2824 [HEOI2016/TJOI2016]排序 题意 给定由 \([1,n]\) 组成的排列每一次操作如下 \(opt0\) 将 \([l,r]\) 升序排序 \(opt1\) 将 \([l,r]\) 降序排序 最后输出第 \(Pos\) 位的值。 题解 与上一题不同的是这里有 \(n\) 种元素但是只用查询一位的值 。 考虑二分答案 二分第 \(Pos\) 位的取值将大于等于 \(mid\) 的值都改为 \(1\) 将小于 \(mid\) 的值都改为 \(0\) 离线进行一遍所有操作。 若操作完后第 \(Pos\) 位为 \(1\) 则 \(ans\ge mid\) 否则 \(ansmid\) 。 注意(代码第 \(72\) 行) cntquery(1,1,n,l[i],r[i]); 中 \(cnt\) 的可能为 \(0\) 在接下来的覆盖中可能会出现 \(lr\) 应该及时判断 。 代码 #includebits/stdc.h
using namespace std;
#define Maxn 100005
typedef long long ll;
inline int rd()
{int x0;char ch,t0;while(!isdigit(ch getchar())) t|ch-;while(isdigit(ch)) xx*10(ch^48),chgetchar();return xt?-x:x;
}
int n,m,Pos,L,R,ans;
int a[Maxn],tmp[Maxn],opt[Maxn],l[Maxn],r[Maxn];
struct Data
{int sum,laz;
}tree[Maxn2];
void pushup(int p)
{tree[p].sumtree[p1].sumtree[p1|1].sum;
}
void pushdown(int p,int nl,int nr)
{if(tree[p].laz!-1){int mid(nlnr)1;tree[p1].sum(mid-nl1)*tree[p].laz;tree[p1|1].sum(nr-mid)*tree[p].laz;tree[p1].laztree[p1|1].laztree[p].laz;tree[p].laz-1;}
}
void build(int p,int nl,int nr)
{tree[p].sum0,tree[p].laz-1;if(nlnr) { tree[p].sumtmp[nl]; return; }int mid(nlnr)1;build(p1,nl,mid),build(p1|1,mid1,nr);pushup(p);
}
void change(int p,int nl,int nr,int l,int r,int k)
{if(nll nrr){tree[p].sum(nr-nl1)*k;tree[p].lazk;return;}pushdown(p,nl,nr);int mid(nlnr)1;if(midl) change(p1,nl,mid,l,r,k);if(midr) change(p1|1,mid1,nr,l,r,k);pushup(p);
}
int query(int p,int nl,int nr,int l,int r)
{if(nll nrr) return tree[p].sum;pushdown(p,nl,nr);int mid(nlnr)1,ret0;if(midl) retquery(p1,nl,mid,l,r);if(midr) retquery(p1|1,mid1,nr,l,r);pushup(p);return ret;
}
bool check(int val)
{for(int i1;in;i) tmp[i](a[i]val)?1:0;build(1,1,n);for(int i1,cnt;im;i){cntquery(1,1,n,l[i],r[i]);change(1,1,n,l[i],r[i],0);if(!cnt) continue;if(opt[i]0) change(1,1,n,r[i]-cnt1,r[i],1);else change(1,1,n,l[i],l[i]cnt-1,1);}return query(1,1,n,Pos,Pos);
}
int main()
{//freopen(.in,r,stdin);//freopen(.out,w,stdout);nrd(),mrd();for(int i1;in;i) a[i]rd();for(int i1;im;i) opt[i]rd(),l[i]rd(),r[i]rd();Posrd();L1,Rn,ans1;while(LR){int mid(LR)1;if(check(mid)) ansmid,Lmid1;else Rmid-1;}printf(%d\n,ans);//fclose(stdin);//fclose(stdout);return 0;
}