給定由小寫字母組成的字串 \(s\) 每一次操作如下:
輸出最終字串
大致思想為,建 \(26\) 棵線段樹,代表每一種字母。
操作:區間查詢出每一種字母的個數,記為 \(cnt[c]\) 。
排序:按照從 \(a\) 至 \(z\)或從 \(z\) 至 \(a\)依次向後覆蓋 \(cnt[i]\) 個位置 。
輸出答案:對於每一位,列舉 \([a,z]\) ,找出覆蓋這一位的字母 。
**:
#includeusing namespace std;
#define maxn 100005
#define maxc 27
int n,m;
struct tree
tree[maxc][maxn<<2];
int cnt[maxc];
void build(int opt,int p,int nl,int nr)
void pushup(int opt,int p)
void change(int opt,int p,int nl,int nr,int l,int r,int x)
pushdown(opt,p,nl,nr);
int mid=(nl+nr)>>1;
if(mid>=l) change(opt,p<<1,nl,mid,l,r,x);
if(mid=l && nr<=r) return tree[opt][p].sum;
pushdown(opt,p,nl,nr);
int mid=(nl+nr)>>1,ret=0;
if(mid>=l) ret+=query(opt,p<<1,nl,mid,l,r);
if(mid>n>>m;
for(int i=0;i<26;i++) build(i,1,1,n);
char x;
for(int i=1;i<=n;i++) cin>>x,change(x-'a',1,1,n,i,i,1);
for(int i=1,l,r,k;i<=m;i++)
else
} for(int i=1;i<=n;i++) for(int j=0;j<26;j++)
if(query(j,1,1,n,i,i))
printf("\n");
//fclose(stdin);
//fclose(stdout);
return 0;
}
給定由 \([1,n]\) 組成的排列,每一次操作如下:
最後輸出第 \(pos\) 位的值。
考慮二分答案!!
二分第 \(pos\) 位的取值,將大於等於 \(mid\) 的值都改為 \(1\) ,將小於 \(mid\) 的值都改為 \(0\) ,離線進行一遍所有操作。
若操作完後第 \(pos\) 位為 \(1\) ,則 \(ans\ge mid\) ,否則 \(ans。
注意:(**第 \(72\) 行)
cnt=query(1,1,n,l[i],r[i]);
中, \(cnt\) 的可能為 \(0\) ,在接下來的覆蓋中可能會出現 \(l>r\) ,應該及時判斷 。
**:
#includeusing namespace std;
#define maxn 100005
typedef long long ll;
inline int rd()
int n,m,pos,l,r,ans;
int a[maxn],tmp[maxn],opt[maxn],l[maxn],r[maxn];
struct data
tree[maxn<<2];
void pushup(int p)
void pushdown(int p,int nl,int nr)
}void build(int p,int nl,int nr)
int mid=(nl+nr)>>1;
build(p<<1,nl,mid),build(p<<1|1,mid+1,nr);
pushup(p);
}void change(int p,int nl,int nr,int l,int r,int k)
pushdown(p,nl,nr);
int mid=(nl+nr)>>1;
if(mid>=l) change(p<<1,nl,mid,l,r,k);
if(mid=l && nr<=r) return tree[p].sum;
pushdown(p,nl,nr);
int mid=(nl+nr)>>1,ret=0;
if(mid>=l) ret+=query(p<<1,nl,mid,l,r);
if(mid=val)?1:0;
build(1,1,n);
for(int i=1,cnt;i<=m;i++)
return query(1,1,n,pos,pos);
}int main()
printf("%d\n",ans);
//fclose(stdin);
//fclose(stdout);
return 0;
}
KMP做題記錄
題目太長不貼了 這道題很巧妙,給定乙個字串s,求最少在首尾新增幾個字元後,s變為乙個迴圈了n次的字串 n 1 假設我們有乙個迴圈串s abcabcabc 我們根據kmp求一次next陣列,就可以通過next strlen s 得到乙個迴圈節的位置從而求出迴圈節的長度,顯然,迴圈節能被s整除。如果s ...
8 25 9 25 做題記錄
2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...
8 25 9 25 做題記錄
2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...