problem 2226 信心題
給定乙個含有n個數字的數列,每個數字都有乙個值a[i](下標從1開始)。定義第i個數字和第j個數字間的距離dis(i,j)=abs(i-j)。
資料範圍:
n<=10^5
q<=10^4
1<=a[i]<=10^3
1<=l<=r<=n
注意到a[i]小於1000,所以我們如果我們可以得到每種a[i]最左出現位置和最優出現位置,然後1000個a[i]掃一遍就可以
所以我們莫隊維護每種數字在原序列中的最左下標和最右下標就可以了,所以add函式和del函式的寫法就很簡單了。
**
#include
#include
#include
#include
#include
using
namespace
std;
const
int inf = 0x3f3f3f3f;
const
int maxn = 1e5+5;
int a[maxn];
int cnt1[maxn];//存左下標
int cnt2[maxn];//存右下標
int pos[maxn];
int ans[maxn];
vector
v[1005];
struct data
q[10005];
bool cmp(const data &a,const data &b)
int sz=sqrt(n);
for(int i=1;i<=n;i++)
scanf("%d",&m);
for(int i=1;i<=m;i++)
sort(q+1,q+1+m,cmp);
for(int i=1;i<=m;i++)
while(l>q[i].l)
while(l//區間向右壓,當前數的最左下標右移
l++;
}while(r>q[i].r)
ans=0;
for(int j=1;j<=1000;j++)
ans[q[i].id]=ans;
}for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
}return
0;}
莫隊演算法小結以及模板題
被splay折磨了乙個星期還是抄模板都wa,除錯的時候查資料都發現資料太大不能查的蒟蒻楊瀾決定學習莫隊演算法,但是萬萬沒想到 莫隊也到處都是坑 題記 莫隊這個東西就是乙個非常簡 單的類似動規的東西,也是那種不會就一直不會,一看題解秒懂的題,雖然我看題解也半天看不懂但是只是第一道題,萬事開頭難嘛 也許...
HYSBZ 2038經典莫隊演算法題
無修改的莫隊 emmm莫隊的幾條性質,必須是離線的,複雜度是n sqrt n 就是通過預處理查詢區間,然後從 l,r 轉移到 ll,rr 這樣的複雜度是曼哈頓距離,即abs l ll abs r rr 通過分塊可以保證複雜度在n sqrt n 內 詳細請參考 include define fi fi...
牛客練習賽8 F題 莫隊演算法
題目鏈結 題意 給乙個長為 n nn 的只含小寫字母的字串 每次查詢乙個區間 l,r 內,有多少子區間可以重排為乙個回文串。思路 首先對於乙個可以重排為回文串的區間,一定滿足至多乙個字母的出現次數為奇數,其餘字母的出現次數為偶數。因為只有26個小寫字母其只考慮出現次數的奇偶性,故可以考慮壓位2 26...