題目連線:hdu_2688_rotate
題意:給你n數,(n<=3e6),有兩個操作,q為 當前有多少對數,滿足嚴格遞增,r l,r為旋轉l,r這個區間的數
題解:求嚴格遞增的順序對我們可以反向用樹狀陣列求逆序對,300w的資料還是有點夠嗆,不過這裡求出來也就nlogn,然後對於旋轉操作,因為區間大小不超過1000,我們只需統計該區間的第乙個數和後面的數的關係,如果第乙個數比後面的數大,就ans++,如果小於就ans--,等於就不管,因為是嚴格遞增,然後就是這裡我加入讀入優化,感覺還是沒什麼卵用,反而比不加快,可能我寫的優化不行吧。這題卡常數卡的有點緊,要注意常數優化,還有就是hdoj的穩定性不是很好,同乙個**有時能過,有時不能過
#include#include#define f(i,a,b) for(int i=a;i<=b;++i)
typedef long long ll;
int sum[10010],a[3000010];char op[2];
inline void add(int x,int c)
inline int ask(int x)
int main(){
int n,m;
while(~scanf("%d",&n)){
memset(sum,0,sizeof(sum));
ll ans=0;
f(i,0,n-1)scanf("%d",&a[i]),ans+=ask(a[i]-1),add(a[i],1);
scanf("%d",&m);
f(i,1,m){
scanf("%s",op);
if(op[0]=='q')printf("%i64d\n",ans);
else{
int l,r;
scanf("%d%d",&l,&r);
int now=a[l];
f(i,l+1,r){
if(a[i]>now)ans--;
else if(a[i]
hdu 2688 Rotate 樹狀陣列
include include include include include using namespace std define lowbit x x x const int maxn 3000030 const int maxc 10010 int n,c maxc a maxn void a...
hdu 4998 Rotate(計算幾何)
解題思路 題目大意 給定n個點和n個角度,平面內任意乙個點依次以這些點point i 為旋轉中心,逆時針旋轉 r i 度,求最後相當於繞哪個點旋轉多少度,求這個點的座標以及旋轉的角度。演算法思想 乙個點 x,y 繞另外乙個點 x0,y0 旋轉 r0 度的公式為 x1 x x0 cos r0 y y0...
樹狀陣列 hdu2689 hdu2838
題意 給定乙個正整數n,和乙個1 n的乙個排列,每個數可以和旁邊的兩個數的任意乙個交換,每交換一次總次數就要加一,問將這個排列轉換成乙個遞增的排列需要多少次交換?題意可以轉換成求這個排列的逆序對數。include include include include using namespace std...