标签:des style blog http io ar color os sp
Description
There is a array contain N(1<N<=100000) numbers. Now give you M(1<M<10000) query.
Every query will be:
1 x : ask longest substring which every number no less than x
2 y x : change the A[y] to x. there are at most change 10 times.
For each ask can you tell me the length of longest substring.
Input
There are multiple tests.
each test first line contain two integer numbers N M,second line contain N integer numbers.
Next M lines each line will be:
1 x : ask longest substring which every number no less than x
2 y x : change the A[y] to x. there are at most change 10 times.
0 < N <= 100000, 0 < M <= 10000, -1000000000 <= A[i] <= 1000000000
Output
Sample Input
Sample Output
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <vector> #include <queue> #include <map> #include <set> #include <stack> #include <algorithm> using namespace std; typedef long long LL; typedef pair<int,int> pii; const int mod = 1e9+7; const int N = 100005 ; #define X first #define Y second int n , q , a[N] ; struct OK { int vis[N] , l[N] , r[N] ; void init() { memset( vis , false , sizeof vis ) ; for( int i = 1 ; i <= n ; ++i ) l[i] = r[i] = i ; } int GetLen( int i ) { return r[i] - l[i] + 1 ; } void Relax( int i ) { if( vis[i+1] ) r[i] = r[i+1]; if( vis[i-1] ) l[i] = l[i-1] , r[l[i-1]] = r[i] ; if( vis[i+1] ) l[r[i+1]] = l[i]; } }e; struct node{ int x , res , id ; bool operator < ( const node &a ) const { return x < a.x ; } }p[N]; void test() { for( int i = 1 ; i <= n ; ++i ) cout << e.l[i] << ‘ ‘ ; cout << endl ; for( int i = 1 ; i <= n ; ++i ) cout << e.r[i] << ‘ ‘ ; cout << endl ; for( int i = 1 ; i <= n ; ++i ) cout << p[i].x << ‘ ‘ << p[i].res << endl ; } void Solve() { for( int i = 1 ; i <= n ; ++i ) { p[i].x = a[i] , p[i].id = i ; } sort( p + 1 , p + n + 1 ) ; e.init(); p[n+1].res = 0 ; for( int i = n ; i > 0 ; --i ) { int id = p[i].id ; e.vis[id] = true ; e.Relax(id); p[i].res = max( p[i+1].res , e.GetLen( p[i].id )); } } int Find( int num ) { int l = 1 , r = n , pos = 0 ; if( num > p[n].x ) return 0; while( l <= r ) { int mid = (l+r)>>1; if( p[mid].x < num ) l = mid + 1 ; else pos = mid , r = mid - 1 ; } return p[pos].res; } void Run() { for( int i = 1 ; i <= n ; ++i ) { scanf("%d",&a[i]); } Solve(); // test(); while(q--){ int op , x , y ; scanf("%d%d",&op,&x); if( op == 1 ){ printf("%d\n",Find(x)); } else { scanf("%d",&y); a[x] = y ; Solve(); // test(); } } } int main(){ #ifdef LOCAL freopen("in.txt","r",stdin); #endif // LOCAL while( scanf("%d%d",&n,&q)!=EOF )Run(); }
标签:des style blog http io ar color os sp
原文地址:http://www.cnblogs.com/hlmark/p/4166145.html